我正在尝试通过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}"}
答案 0 :(得分:1)
Cookie标头是关键。当您从xhr(也称为您的浏览器)发送请求时,相关的cookie会自动附加到您的请求中。
这些cookie是通常管理会话的方式,响应消息表明服务器在您的请求中找不到有效的会话cookie。
您需要通过登录或以其他方式开始此会话来"授权"然后在发送之前将该会话Cookie插入您的请求中。
重新读取后,令牌标头很可能也不是静态的。我的猜测是,这是为了防止自动请求,因此可能难以规避。
响应OP评论更新:
使用cookiejar或只是阅读urllib文档并弄清楚如何提取然后插入cookie。
how to send cookies inside post request
您需要在开发人员工具中研究网站的行为,并查看哪个请求会触发会话Cookie更新,然后在模拟您的帖子请求之前模拟该请求。
您已收到三个答案。将问题标记为正确并发布另一个问题,如果仍有问题则更具体。