Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对POST请求使用“Requests”python模块,接收响应就像获取响应一样_Python_Python Requests - Fatal编程技术网

对POST请求使用“Requests”python模块,接收响应就像获取响应一样

对POST请求使用“Requests”python模块,接收响应就像获取响应一样,python,python-requests,Python,Python Requests,因此,我试图制作一个脚本来检查公交车的预订可用性。这方面的起始链接是 在保留框中,需要选择以下内容: 预订:白天有导游的徒步旅行,奥哈拉湖巴士 公园:Yoho湖奥哈拉 抵达日期:6月16日 聚会人数:2人 输入这些选项后,将进入下一页: 我的理解是,如果我向第二个链接发送一个包含正确数据的POST请求,它将返回我正在查找的页面 如果在选择正确参数时查看开发工具网络信息,则表单数据为: __事件目标: __事件参数: __VIEWSTATE:-真正的长字符串- __VIEWSTATEGENERAT

因此,我试图制作一个脚本来检查公交车的预订可用性。这方面的起始链接是

在保留框中,需要选择以下内容:

预订:白天有导游的徒步旅行,奥哈拉湖巴士 公园:Yoho湖奥哈拉 抵达日期:6月16日 聚会人数:2人 输入这些选项后,将进入下一页:

我的理解是,如果我向第二个链接发送一个包含正确数据的POST请求,它将返回我正在查找的页面

如果在选择正确参数时查看开发工具网络信息,则表单数据为:

__事件目标:

__事件参数: __VIEWSTATE:-真正的长字符串-

__VIEWSTATEGENERATOR:8D0E13E6

ctl00$MainContentPlaceHolder$rdbListReservationType:事件

地址:213a1bc9-9218-4e98-9a7f-0f209008e437**

到达月份:2017-06-16

抵达日期:19

晚上:1

离港月份:

出发日:

设备:

DDL设备分包:

参加派对:2

ctl00$MainContentPlaceHolder$chkeExcludeAccess:打开

ctl00$MainContentPlaceHolder$imageButtonCalendar.x:64

ctl00$MainContentPlaceHolder$imageButtonCalendar.y:56

所以我写的代码是:

import requests

payload = {
        '__EVENTTARGET': '',
        '__EVENTARGUMENT': '',
        '__VIEWSTATE':-reallly long string-,
        '__VIEWSTATEGENERATOR': '8D0E13E6',
        'ctl00$MainContentPlaceHolder$rdbListReservationType': 'Events',
        'ddlLocations': '213a1bc9-9218-4e98-9a7f-0f209008e437',
        'ddlArrivalMonth': 2017-06-16,
        'ddlArrivalDay': 19,
        'ddlNights': 1,
        'ddlDepartureMonth': '',
        'ddlDepartureDay': '',
        'ddlEquipment': '',
        'ddlEquipmentSub': '',
        'ddlPartySize': 2,
        'ctl00$MainContentPlaceHolder$chkExcludeAccessible': 'on',
        'ctl00$MainContentPlaceHolder$imageButtonCalendar.x': 64,
        'ctl00$MainContentPlaceHolder$imageButtonCalendar.y': 56
        }

r = requests.get(r"https://reservation.pc.gc.ca/Yoho-LakeO'Hara?Calendar", data=payload)

print r.text
r、 文本最终只是第二个链接,就好像没有输入任何参数一样——就好像我只是向链接发送了一个普通的GET请求。我尝试将整数的有效负载值转换为字符串,我尝试删除空的key:value对。不走运。试图找出我遗漏了什么。

您正在使用

r = requests.get(r"https://reservation.pc.gc.ca/Yoho-LakeO'Hara?Calendar", data=payload)
而不是

r = requests.post(r"https://reservation.pc.gc.ca/Yoho-LakeO'Hara?Calendar", data=payload)
深入研究您的问题,我发现您正在调用的URL实际上是重定向到另一个URL,返回HTTP响应302:

$ curl -I "https://reservation.pc.gc.ca/Yoho-LakeO'Hara"
HTTP/1.1 302 Found
Cache-Control: private
Content-Length: 77273
Content-Type: text/html; charset=utf-8
Location: https://reservation-pc.fjgc-gccf.gc.ca/GccfLanguage.aspx?lang=eng&ret=https%3a%2f%2freservation.pc.gc.ca%3a443%2fYoho-LakeO%27Hara
Server: Microsoft-IIS/8.0
Set-Cookie: ASP.NET_SessionId=qw4p4e2zxjxx0c2zyq014p45; path=/; secure; HttpOnly
Set-Cookie: CookieLocaleName=en-CA; path=/; secure; HttpOnly
X-Powered-By: ASP.NET
X-Frame-Options: SAMEORIGIN
Date: Wed, 17 May 2017 14:22:53 GMT
但是,根据响应中的位置也会导致302:

$ curl -I "https://reservation-pc.fjgc-gccf.gc.ca/GccfLanguage.aspx?lang=eng&ret=https%3a%2f%2freservation.pc.gc.ca%3a443%2fYoho-LakeO%27Hara"
HTTP/1.1 302 Found
Cache-Control: private
Content-Length: 179
Content-Type: text/html; charset=utf-8
Location: https://reservation.pc.gc.ca:443/Yoho-LakeO'Hara?gccf=true
Server: Microsoft-IIS/8.0
Set-Cookie: ASP.NET_SessionId=rbcuvexfg4fb340ixtcjd1qy; path=/; secure; HttpOnly
Set-Cookie: _gc_lang=eng; domain=.fjgc-gccf.gc.ca; path=/; secure; HttpOnly
X-Powered-By: ASP.NET
X-Frame-Options: SAMEORIGIN
Date: Wed, 17 May 2017 14:24:55 GMT

所有这些可能最终导致请求将您的帖子转换为GET…

在我看来,有两件事正在发生:

@勘误表是正确的,这应该是一个POST请求。你已经走到一半了

但我注意到,它似乎将表单数据发布到Home.aspx,而您在提交表单后看到的URL是该处理和后续重定向的结果

您可以尝试将表单数据作为json发布到./Home.aspx

通过《邮递员》我发现这几乎奏效了,但我必须指定内容类型才能得到正确的结果

如果您需要知道如何向.post方法添加标题和正文说明,这里似乎有一个很好的示例,但可能有些过时:


还有,fwiw,看看邮递员。如果您都不熟悉请求,也不熟悉Python,至少这可能会给您带来一些尝试和错误的负担。

您可以尝试更改请求吗。get to requests.Post使用缩进的方式,您发布的代码将无法运行。请尝试创建一个可以无错误执行的正确的脚本。对不起,这是我的第一篇SO文章,这不是我python脚本中的缩进。让我试着编辑它以正确显示。不幸的是,这没有起到作用,仍然返回页面,就像我直接访问链接一样。感谢进一步挖掘。那么,在你看来,有什么方法可以得到我想要的正确的帖子回复吗?或者重定向会把一切都搞砸吗?老实说,我一生中从未遇到过这样的问题,所以我不能在这个特殊的时刻告诉你:我今天晚些时候可以试着检查一下……好吧,如果我在.post函数中添加allow_redirects=False,我会更进一步。它现在让我进入日程安排页面,只是在错误的日期!就是这样,非常感谢!在请求中包含标题,它就像一个符咒。