为什么接下来两种获取身份验证令牌的方法不相同?
第一个是在终端中使用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_code
是404
,所以我无法获得令牌。
为什么第一种方法有效,第二种方法没有?
另外,如何使第二种方法有效?
谢谢!
答案 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/
>>>