【问题标题】:Python - Using requests sends post messagePython - 使用请求发送帖子消息
【发布时间】:2015-02-12 00:34:08
【问题描述】:

我使用 Postman 向 Jetstar 网站发送原始请求以获取航班详细信息。我想使用 python 脚本使用 requests 库做同样的事情,但我无法得到正确的响应。

这是我在 Postman 中所做的:

还有一个我用来发送帖子请求的简单脚本:

import requests
files = {'file': open('PostContent.txt', 'rb')}
if __name__ == "__name__"):
    url = "http://www.jetstar.com/"
    r = requests.post(url, files = files)
    print(r.text)

当我运行 python 脚本时,我总是得到欢迎页面而不是航班详细信息。我不确定是什么错误?

注意:当我搜索航班时,PostContent.txt 包含原始文本形式的数据。

我在搜索特定航班日期时使用 Chrome 开发工具捕获 POST 请求。它是标题中的表单数据。

【问题讨论】:

  • PostContent.txt的内容是什么?
  • 嗨@PabloSantaCruz,我刚刚编辑了我的问题,希望对你来说更清楚!
  • 请将 PostContent.txt 作为文本发布。
  • 也许尝试使用urllib.urlencode(files) 对POST 数据进行编码;如果这不起作用,请打开像 wireshark 这样的数据包分析器并检查正在发送的数据是什么样的。

标签: python python-requests postman


【解决方案1】:

尝试使用字典而不是 FILE。 FILE 应该用于发布 FILE,而不是 FORM-ENCODED 帖子,这可能是网站所期望的。

payload = {
   'DropDownListCurrency': 'SGD'
}
r = requests.post("http://httpbin.org/post", data=payload)

【讨论】:

  • 是的,你是对的,@Pablo!但是你知道如何在 python 中将文本文件转换为 dict 吗?因为我对 Python 也很陌生!
【解决方案2】:

您使用的密钥 file 对于此类请求是错误的。您的示例代码也不起作用!只需在此处粘贴工作代码...

import requests
import logging

logging.basicConfig(level=logging.DEBUG)

payload = {"__EVENTTARGET":"",
"__EVENTARGUMENT":"",
"__VIEWSTATE":"/wEPDwUBMGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFJ01lbWJlckxvZ2luU2VhcmNoVmlldyRtZW1iZXJfUmVtZW1iZXJtZSDCMtVG/1lYc7dy4fVekQjBMvD5",
"pageToken":"",
"total_price":"",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$RadioButtonMarketStructure":"RoundTrip",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextBoxMarketOrigin1":"Nadi (NAN)",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextBoxMarketDestination1":"Melbourne (Tullamarine) (MEL)",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextboxDepartureDate1":"14/01/2015",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextboxDestinationDate1":"16/02/2015",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$DropDownListCurrency":"AUD",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextBoxMarketOrigin2":"",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextBoxMarketDestination2":"",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextboxDepartureDate2":"16/02/2015",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextboxDestinationDate2":"",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextBoxMarketOrigin3":"",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextBoxMarketDestination3":"",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextboxDepartureDate3":"27/12/2014",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextboxDestinationDate3":"",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextBoxMarketOrigin4":"",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextBoxMarketDestination4":"",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextboxDepartureDate4":"03/01/2015",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextboxDestinationDate4":"",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextBoxMarketOrigin5":"",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextBoxMarketDestination5":"",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextboxDepartureDate5":"10/01/2015",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextboxDestinationDate5":"",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextBoxMarketOrigin6":"",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextBoxMarketDestination6":"",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextboxDepartureDate6":"17/01/2015",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextboxDestinationDate6":"",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$DropDownListPassengerType_ADT":1,
"ControlGroupSearchView$AvailabilitySearchInputSearchView$DropDownListPassengerType_CHD":0,
"ControlGroupSearchView$AvailabilitySearchInputSearchView$DropDownListPassengerType_INFANT":0,
"ControlGroupSearchView$AvailabilitySearchInputSearchView$RadioButtonSearchBy":"SearchStandard",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextBoxMultiCityOrigin1":"Origin",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextBoxMultiCityDestination1":"Destination",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextboxDepartureMultiDate1":"",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextBoxMultiCityOrigin2":"Origin",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextBoxMultiCityDestination2":"Destination",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$TextboxDepartureMultiDate2":"",
"ControlGroupSearchView$AvailabilitySearchInputSearchView$DropDownListMultiPassengerType_ADT":1,
"ControlGroupSearchView$AvailabilitySearchInputSearchView$DropDownListMultiPassengerType_CHD":0,
"ControlGroupSearchView$AvailabilitySearchInputSearchView$DropDownListMultiPassengerType_INFANT":0,
"ControlGroupSearchView$AvailabilitySearchInputSearchView$numberTrips":2,
"ControlGroupSearchView$AvailabilitySearchInputSearchView$ButtonSubmit":""}

if __name__ == "__main__":
    url = "http://booknow.jetstar.com/Search.aspx"
    r = requests.post(url, data=payload)
    print(r.text)

【讨论】:

  • 嗨@wenzul,你是怎么得到payload字典的?你是硬编码还是使用任何脚本来创建它?
  • 可能它正在使用scrapy。不知道。只需复制内容并通过正则表达式插入报价。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-30
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多