linux curl和python请求之间的区别,为什么GET请求有不同的结果?

时间:2013-11-23 20:45:06

标签: python curl request

为什么接下来两种获取身份验证令牌的方法不相同? 第一个是在终端中使用curl

curl -X POST "http://myurl.com" -d "grant_type=password&username=me&password=mypass&client_secret=123&client_id=456"

此请求成功返回令牌。 如果我使用python的请求库:

import requests   
url = 'http://myurl.com'                                                              

query_args = { "grant_type":"password",
               "username":'me',
               "password":'mypass',
               "client_secret":'123',
               'client_id':'456'}
r = requests.get(url, data=query_args)

我得到的结果是r.status_code404,所以我无法获得令牌。 为什么第一种方法有效,第二种方法没有?

另外,如何使第二种方法有效?

谢谢!

1 个答案:

答案 0 :(得分:1)

因此curl -d标志从手册页发送数据作为发布数据:

   -d/--data <data>
     

(HTTP)将POST请求中的指定数据发送到   HTTP服务器,与用户填写HTML表单并按下提交按钮时浏览器的操作方式相同。这将导致curl使用content-type application / x-www-form-urlencoded将数据传递到服务器。与-F / - 形式比较。

所以你应该使用request.post。您可能还想使用params属性而不是数据属性,请参阅以下示例:

>>> data = {'test':'12345'}
>>> url = 'http://myurl.com'
>>> r = requests.post(url,params=data)
>>> print r.url
http://myurl.com/?test=12345
>>> r = requests.post(url,data=data)
>>> print r.url
http://myurl.com/
>>>