为什么cURL给出了正确的答案,而scrapy没有呢?在
我想用javascript来填充表单的站点,然后发布它并在提供内容之前进行验证。在
在最初的GET请求中从javascript中获取参数之后,我用python复制了这个js。我的“TS644333_75”值与js值匹配(通过执行文档.写入(..)输出,而不是让它像正常一样提交),如果你把结果复制并粘贴到cURL中,那也可以。例如:
curl --http1.0 'http://www.betvictor.com/sports/en/football' -H 'Connection: keep-alive'
-H 'Accept-Encoding: gzip,deflate' -H 'Accept-Language: en'
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
-H 'Referer: http://www.betvictor.com/sports/en/football' -H 'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0'
--data
'TS644333_id=3&
TS644333_75=286800b2a80cd3334cd2895e42e67031%3Ayxxy%3A3N6QfX3q%3A1685704694&
TS644333_md=1&
TS644333_rf=0&
TS644333_ct=0&
TS644333_pd=0' --compressed
在哪里可以得到TS644333_75我只需复制并粘贴python代码在模拟js时计算的结果。在
wireshark中的监视包显示了这个POST,如here所示(我添加了一些行空间以使POST数据更具可读性,但是在wireshark中可以看到)。在
但是,如果我开始一个破壳:
^{pr2}$并构造一个表单请求:
2) from scrapy.http import FormRequest
req=FormRequest(
url='http://www.betvictor.com/sports/en/football',
formdata={
'TS644333_id': '3',
'TS644333_75': '286800b2a80cd3334cd2895e42e67031:yxxy:3N6QfX3q:1685704694',
'TS644333_md': '1',
'TS644333_rf': '0',
'TS644333_ct': '0',
'TS644333_pd': '0'
},
headers={
'Referer': 'http://www.betvictor.com/sports/en/football',
'Connection': 'keep-alive'
}
)
那就去拿吧
3) fetch(req)
我返回的响应体只是另一个javascript挑战,而不是所需的服务内容。在
然而wireshark中看到的包是(同样在POST params中添加了一些可读性的新行) 显示了here,在我看来,一致的 . 在
出什么问题了?看起来相同的数据包如何导致不同的服务器响应?为什么这不起作用?在
它可能是我发布的计算参数中“:”的编码,但它看起来编码正确,而且在wireshark中两者都匹配,所以我不认为这是问题所在。在
结果发现,参数的顺序对这个服务器非常重要(我猜是因为它用有序的输入模拟一个隐藏的表单,这是一个额外的验证检查)。在python请求中,手工使用POST str和url编码(即
':' > '%3A'
)可以使事情正常进行。虽然这两个包的顺序是一样的,但它们的顺序确实是一样的。在在
Scrapy
中传递一个元组,如:改为
formdata=
而不是字典,这样可以保持顺序。在还需要头
{'Content-Type': 'application/x-www-form-urlencoded'}
。在正如
anana
在他的回答中指出的,在所有请求url后面加上一个“/”也可以解决问题,事实上,如果你这样做的话,你只需要get请求就可以逃脱惩罚,没有js模拟,也没有表单发布!在如果你在你的网址上加上一个斜杠,这似乎是可行的-同样的废话请求,但网址改为:
其他示例:
我在测试另一个网站时也遇到了同样的问题,这个网页在
^{pr2}$curl
上运行得很好,但却不能使用requests
。在与之斗争了一段时间后,这个用额外斜杠表示的答案解决了这个问题。在返回此:
.aspx后面的斜杠很重要。没有它是行不通的。如果没有斜杠,页面将返回一个空的javascript质询。在
返回此:
相关问题 更多 >
编程相关推荐