使用Python请求库

时间:2015-06-01 23:20:29

标签: python bash curl

我有一个使用此形式的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"

总之,两个脚本都包含:

  1. Cookie - uhash

  2. 三个data参数称为actionhashtradeid

  3. 我目前的问题是,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&timestamp=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'
    

    不太确定为什么会这样。

1 个答案:

答案 0 :(得分:1)

尝试使用数据或json密钥而不是params,如果数据是您首选的方法,请使用json.dumps(payload)。