shell curl 與 python requests
偶然發現了curl和requests庫的一個區別。情境是這樣的–
這樣使用curl去發起post請求:
curl -v -X POST http://api.xx.com/api/yy.php --data 'params={"sign":"xxxx","data":[{"uid":110,"remark":"just4test"}]}'
後端介面服務能正常解析params參數並響應結果。但是當我改用python去請求時:
import jsonimport requestsdata = {"sign":"xxxx","data":[{"uid":110,"remark":"just4test"}]}reqbody = ('params=%s'%json.dumps(data))res = requests.post( 'http://api.xx.com/api/yy.php', data=reqbody)
介面無法解析params並返回錯誤。
後來認真對比了一下headers和body,發現有可能是header設定不同的原因。
仔細查看,curl中的header有一行是:
Content-Type: application/x-www-form-urlencoded
但在python requests中並沒有對應的設定,因此加上了這一個header,其後請求能正常返回。
import jsonimport requestsheaders = {'Content-Type': 'application/x-www-form-urlencoded'}data = {"sign":"xxxx","data":[{"uid":110,"remark":"just4test"}]}reqbody = ('params=%s'%json.dumps(data))res = requests.post( 'http://api.xx.com/api/yy.php', data=reqbody, headers=headers)