记得我的上篇文章( form post 和 api post )说了request的post请求问题。其中我提到了一个restframework推荐的第三方包: Django OAuth Toolkit,这个包真的是很坑爹,还被restframework第一推荐的第三方包呢,接口都不兼容api post方式,只能用form post。
api post(接口调用) 方式:发送的数据样式如下:
POST / HTTP/1.1
Host: 192.168.1.44:9001
Content-Type: application/json
Connection: keep-alive
Accept: */*
User-Agent: doDebuger/1 CFNetwork/711.3.18 Darwin/14.0.0
Content-Length: 294
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
{
"username" : 13333333333,
"password" : 111111,
"client_id" : "fNm0EDIXbfuuDowUpAoq5GTEiywV8eg0TpiIVnV8",
"client_secret" : "sJexq9rUQ2g2wW1CERwHtW5swr9iw1jofR2VbYyfvaJInYJWjNcvJnjsNV8mp8aiW3jjrzn55w9EKIU6KEougO2EmXY7FfAZUGjRnzyywlSnVwfkFJZLuSkcLfp3S4q4",
"grant_type" : "password"
}
form post(表单提交)方式:发送的数据样式如下:
POST / HTTP/1.1
Host: 192.168.1.44:9001
Connection: keep-alive
Content-Length: 720
Cache-Control: no-cache
Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarynqk24w5d3HTBWjmi
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
------WebKitFormBoundarynqk24w5d3HTBWjmi
Content-Disposition: form-data; name="username"
13333333333
------WebKitFormBoundarynqk24w5d3HTBWjmi
Content-Disposition: form-data; name="password"
111111
------WebKitFormBoundarynqk24w5d3HTBWjmi
Content-Disposition: form-data; name="client_id"
fNm0EDIXbfuuDowUpAoq5GTEiywV8eg0TpiIVnV8
------WebKitFormBoundarynqk24w5d3HTBWjmi
Content-Disposition: form-data; name="client_secret"
sJexq9rUQ2g2wW1CERwHtW5swr9iw1jofR2VbYyfvaJInYJWjNcvJnjsNV8mp8aiW3jjrzn55w9EKIU6KEougO2EmXY7FfAZUGjRnzyywlSnVwfkFJZLuSkcLfp3S4q4
------WebKitFormBoundarynqk24w5d3HTBWjmi
Content-Disposition: form-data; name="grant_type"
password
------WebKitFormBoundarynqk24w5d3HTBWjmi--
以上数据的获取,我用的是SocketTest3工具,使用如下:
只需要设置 这几个点,将请求的地址指向启动SocketTest3工具的电脑,并且端口指定为9001(这个端口要写的偏一点的,写常用的端口的话,会得到一些无关本次测试的数据,所以没有必要)。
以为 我发的请求都是api post方式的 ,所以,服务器一直给我返回的是 400状态码,且 “unsupported_grant_type”。到网上查了一些,大多说的是服务器的请求的头部容量设置小了,可能存在这个问题吧,但是,我知道,自己发的请求根本就没有头部信息,怎么会超量呢,后来发现问题了。
所以说Django OAuth Toolkit 还真是坑爹啊,没办法,我只能把请求改成form表单提交的形式。
下载SocketTest3工具,请点击这里。