我正在尝试使用请求从 https://www.voyages-sncf.com/billet-train 获取一些火车票时间和价格。 到目前为止,我似乎哪儿也去不了。
url = 'https://www.voyages-sncf.com/billet-train'
formData = {
'ORIGIN_CITY': 'PARIS',
'DESTINATION_CITY': 'BORDEAUX',
'OUTWARD_DATE': '30/09/2017',
'TRAVEL_TYPE': 'AS',
'OUTWARD_SCHEDULE_TYPE': 'DEPARTURE_FROM',
'OUTWARD_TIME': '07h'
}
s = requests.Session()
r = s.post(url, headers=headers, data=formData, proxies = proxyDict)
print(r)
print(r.headers)
首先我不明白为什么我会得到 200 http 代码...... 另外,我唯一能登陆的是一个错误页面(在Request.history之后)
print(r.history)
print(r.history[0].headers["Location"])
print(r.history[1].headers["Location"])
print(r.history[2].headers["Location"])
print(r.history[3].headers["Location"])
手动做同样的事情并观察发生的情况,我可以看到填写表格将我重定向到:
https://www.voyages-sncf.com/recherche-en-cours?hid=2BH,
然后访问 voyages-sncf.com/vsc/proposals/findProposals?hid=2BH,
最后到 voyages-sncf.com/proposition?clientId=4765cf49-d109-4a93-83ff-3c21182d7891&language=fr&country=FR,那里有价格和时间。
我认为请求可以处理重定向,但我一定错过了一些东西...... 有人可以解释一下这是怎么回事吗?
在这里查看我的答案https://stackoverflow.com/a/78845896/364818
简单地说,
requests
被故意破坏,在重定向后将 POST 转换为 GET,以模仿浏览器被破坏的方式...