我有一个使用此形式的Requests库的Python脚本:
uhash = '1234567abcdefg'
cookies = {
'uhash':uhash
}
payload = {
'action':'trade.bump',
'hash':uhash,
'tradeid':'12345678'
}
r = requests.post(
'http://www.target_url.com/api/core',
cookies=cookies,
params=payload
)
以上是我尝试创建以下cURL请求的Python尝试(用bash编写):
HASH="1234567abcdefg"
TRADEID="12345678"
curl 'http://www.target_url.com/api/core' -H "Cookie: uhash=$HASH" --data "action=trade.bump&hash=$HASH&tradeid=$TRADEID"
总之,两个脚本都包含:
Cookie - uhash
三个data
参数称为action
,hash
和tradeid
我目前的问题是,bash脚本有效 - 我使用bash脚本时的服务器响应是:
{"meta":{"code":200},"data":{"bumped":true,"count":15}}
但是,如果我使用Python脚本,使用SAME cookie和参数值作为bash脚本,我得到:
{"meta":{"code":301},"data":{"message":"You can't bump a trade that doesn't exist ;_;"}}
上述错误告诉我交易不存在,尽管存在tradeid
且与我的bash脚本参数完全相同。
我尝试使用Firefox的方便的copy-as-curl工具来复制curl命令,这就是我制作bash脚本的方法。但是,一旦我尝试将其翻译成Python脚本,它就会告诉我上述错误。也许我错误地使用了Requests库,我遗漏了一些东西。
附件是从Firefox获取的完整cURL请求(不用担心,参数已被清理,这意味着,它们不是真正的值):
curl 'http://www.tf2outpost.com/api/core' -H 'Host: www.tf2outpost.com' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0' -H 'Accept: application/json, text/javascript, */*; q=0.01' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' -H 'X-Requested-With: XMLHttpRequest' -H 'Referer: http://www.tf2outpost.com/trades' -H 'Cookie: __qca=P0-6517545-1420724809746; __utma=5135382.11011755.14224810.14331180.14180489.7; __utmz=51353782.1420724810.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); uhash=abcdefg12345678; mb_uid2=3211475230616776; CTag61=14338638870; __utmb=513532.9.10.14180489; __utmc=513782; __utmt=1; __utmt_b=1; __utmt_c=1; OX_plg=sl|qt|pm; HIRO_COOKIE=data=&newSession=true&id=2237524293×tamp=1433506185; HIRO_CLIENT_ID=67751187' -H 'Connection: keep-alive' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' --data 'action=trade.bump&hash=abcdefg12345678&tradeid=12345678'
不太确定为什么会这样。
答案 0 :(得分:1)
尝试使用数据或json密钥而不是params,如果数据是您首选的方法,请使用json.dumps(payload)。