Python - 使用请求发送帖子消息

Posted

技术标签:

【中文标题】Python - 使用请求发送帖子消息【英文标题】:Python - Using requests sends post message 【发布时间】: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 这样的数据包分析器并检查正在发送的数据是什么样的。 【参考方案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。不知道。只需复制内容并通过正则表达式插入报价。

以上是关于Python - 使用请求发送帖子消息的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在 AngularJs 帖子中收到 400 个错误请求?

查找和删除 Discord webhook 消息

使用 ajax 发送帖子 - 错误请求问题

如何使用邮递员休息客户端将帖子请求发送到以下帖子方法

Django - 新喜欢后向用户发送通知

在卸载/卸载前使用 Javascript 发送帖子请求。那可能吗? [复制]