为后期请求模拟xhr

时间:2018-01-30 01:56:33

标签: python

我正在尝试通过python发送一个帖子请求,但它很糟糕。

我希望我的代码批准我选择的座位并继续付款。

我把选定的电影院放置时间和座位后,从帖子请求中获取了这个网址,数据和令牌。

import urllib.parse, urllib.request 

url = "https://tickets.yesplanet.co.il/YPR/SelectSeatPageRes.aspx/SetSelectedSeats?ec=10725013018-246564"


data = urllib.parse.urlencode(dict(
seats = "11,19#11,20#11,21#11,22",
token ="246564#5#1"
))


res = urllib.request.urlopen(url, data.encode("utf8"))


print (res.read())

该链接已过期,但结果如下:

会话结束在您完成购买之前,会话似乎已经结束。

指向主网站的链接:https://www.yesplanet.co.il

我如何知道我的请求是否完整?

来自开发工具的标题和响应标签中的说服信息:

响应标题:

Cache-Control:private, max-age=0
Content-Length:170
Content-Type:application/json; charset=utf-8
Date:Tue, 30 Jan 2018 01:27:26 GMT
P3P:CP="NOI ADM DEV COM NAV OUR STP"
Server:Microsoft-IIS/8.5
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET

请求标题:

**Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate, br
Accept-Language:he-IL,he;q=0.9,en-US;q=0.8,en;q=0.7
Connection:keep-alive
Content-Length:44
Content-Type:application/json; charset=UTF-8
Cookie:ASP.NET_SessionId=p4citijvw3vrqxuoekqnlrhw; _ga=GA1.3.525452416.1517275557; _gid=GA1.3.1168599094.1517275557; _gat_tealium_0=1; utag_main=v_id:016144aba503001d7d72fa299b0904072001c06a00868$_sn:1$_ss:0$_st:1517277365866$ses_id:1517275555076%3Bexp-session$_pn:2%3Bexp-session; hfOIKey=CXCFcTD1; SS#246564#5#1=; SS%23246564%235%231=17%2C12%2317%2C13; hfSKey=%7C%7C%7C%7C%7C%7C%7C%7C%7C1072_res%7C10725013018-246564%7C20
Host:tickets.yesplanet.co.il
Origin:https://tickets.yesplanet.co.il
Referer:https://tickets.yesplanet.co.il/YPR/SelectSeatPageRes.aspx?dtticks=636528796178961691&cf=1004&ec=10725013018-246564
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36
X-Requested-With:XMLHttpRequest**

请求有效负载

{seats: "16,10#16,11", token: "246564#5#1"}
seats
:
"16,10#16,11"
token
:
"246564#5#1"

和响应标签:

{"d":"{\"ReturnCode\":0,\"Message\":null,\"Redirect\":\"/YPR/OrderFormPageRes.aspx?dtticks=636528796470870119\\u0026cf=1005\\u0026ec=10725013018-246564\",\"Data\":null}"}

1 个答案:

答案 0 :(得分:1)

Cookie标头是关键。当您从xhr(也称为您的浏览器)发送请求时,相关的cookie会自动附加到您的请求中。

这些cookie是通常管理会话的方式,响应消息表明服务器在您的请求中找不到有效的会话cookie。

您需要通过登录或以其他方式开始此会话来"授权"然后在发送之前将该会话Cookie插入您的请求中。

重新读取后,令牌标头很可能也不是静态的。我的猜测是,这是为了防止自动请求,因此可能难以规避。

响应OP评论更新:

使用cookiejar或只是阅读urllib文档并弄清楚如何提取然后插入cookie。

how to send cookies inside post request

您需要在开发人员工具中研究网站的行为,并查看哪个请求会触发会话Cookie更新,然后在模拟您的帖子请求之前模拟该请求。

您已收到三个答案。将问题标记为正确并发布另一个问题,如果仍有问题则更具体。