复制curl命令python 3 urllib请求API

问题描述:

这个问题有点让我发疯。 我正在做一个非常简单的python 3脚本来管理公共网站中的API。 我可以用卷曲来完成,但不能在pyhton中完成。 不能使用任何请求库或卷曲在我的真实环境,只是为了测试复制curl命令python 3 urllib请求API

这是工作:

curl -d "credential_0=XXXX&credential_1=XXXXXX" -c cookiefile.txt https://XXXXXXXXXXXXXXX/LOGIN 

curl -d 'json={"devices" : ["00:1A:1E:29:73:B2","00:1A:1E:29:73:B2"]}' -b cookiefile.txt -v https://XXXXXXXXX/api-path --trace-ascii /dev/stdout 

,我们可以在卷曲调试看到这一点:

发送抬头, 298个字节(0x12a)

0000:POST/API-路径HTTP/1.1

0034:主机:XXXXXXXXXXXXXXXX

0056:用户代理:卷曲/ 7.47.0

006F:接受:/

007C:饼干:csrf_token = 751b6bd9-0290-496b-820E-XXXXXXXX;会话 00BC:= XXXXXX-6d29-4cf9-8907-XXXXXXXXXXXX

00e3:内容长度:60

00f7:内容类型:应用/ X WWW的窗体-urlencoded

0128: =>发送数据,60字节(0x3c)

0000:json = {“devices”:[“00:1A:1E:29:73:B2”,“00:1A:1E:29:73: B2“]} ==信息:上传完全发送:60个字节中的60个

这个i s Python代码复制第二个请求,这是有问题的一个

string_query={"devices" : [ "34:FC:B9:CE:14:7E","00:1A:1E:29:73:B2" ]} 
jsonbody_url=urllib.parse.urlencode(string_query) 
jsonbody_url=jsonbody_url.encode("utf-8") 

req=urllib.request.Request(url,data=jsonbody_url,headers={"Cookie" : 
cookie,"Content-Type": "application/x-www-form-urlencoded","User- 
Agent":"curl/7.47.0","charset":"UTF-8","Content- 
length":len(jsonbody_url), 
"Connection": "Keep-Alive"},method='POST') 

而服务器完全忽略了Json内容。 其他所有工作,登录和其他网址参数从相同的API

任何想法?

试试这个:

import requests 

string_query={"devices" : [ "34:FC:B9:CE:14:7E","00:1A:1E:29:73:B2" ]} 
headers={ 
    "Cookie" : cookie, 
    "Content-Type": "application/x-www-form-urlencoded", 
    "User-Agent":"curl/7.47.0", 
    "charset":"UTF-8", 
    "Connection": "Keep-Alive" 
} 
response = requests.post(url,data=string_query,headers=headers) 
print(response.content) 
+0

你好,已经尝试请求模块只是为了让来自服务器的响应(正如我所说的,我不能用它工作environemnt),但没有运气。服务器忽略了json输入。我开始认为服务器API有问题。谢谢 – pedrolp

+0

你只能使用urllib吗? –

+0

如果您可以提供API的文档或端点,则可能有其他解决方案。 –