【问题标题】:simulating xhr for a post request为 post 请求模拟 xhr
【发布时间】:2018-02-01 01:09:52
【问题描述】:

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

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

在输入选定的电影院地点时间和座位后,我从发布请求中获取了这个 url、数据和令牌。

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}"}

【问题讨论】:

    标签: python


    【解决方案1】:

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

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

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

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

    更新以响应 OP 评论:

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

    how to send cookies inside post request

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

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

    【讨论】:

    • 好吧,我确信令牌是问题所在,但现在我知道它只会在电影/电影院/小时发生变化时发生变化。 cookie 对我来说看起来像是胡言乱语,我需要如何以及在何处将其添加到我的请求中。我有一个机械化代码,可以进行“新会话”以及表单中包含的所有内容(如果有帮助的话)。 @约翰H
    猜你喜欢
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多