如何将CURL命令转换为Python
我想知道如何将以下Curl命令转换为Python: curl-G-H“接受:应用程序/json” ''--数据URL编码 'query=[“=”,“certname”,“myserver”] 我尝试了以下两个选项(1:使用httlib和2:使用urllib2): 选项1:使用httlib 它不起作用,但如果我执行一个没有数据的简单请求(urlencode),例如 connection.request('POST','/facts/myserver',None,headers) 注意:“/experimental/events”需要--data-urlencode,但“/facts/myserver”不需要--data-urlencode 选项2:使用urllib2 它不起作用,但同样,如果我执行一个没有数据的简单请求(urlencode),例如 url_path=”“,然后 server\u request=urllib2.request(url\u路径) 注意:“/experimental/events”需要--data-urlencode,但“/facts/myserver”不需要--data-urlencode 我一直在使用这种--urlencode'query=[“=”,“certname”,“myserver”]'数据。如何将CURL命令转换为Python,python,curl,Python,Curl,我想知道如何将以下Curl命令转换为Python: curl-G-H“接受:应用程序/json” ''--数据URL编码 'query=[“=”,“certname”,“myserver”] 我尝试了以下两个选项(1:使用httlib和2:使用urllib2): 选项1:使用httlib 它不起作用,但如果我执行一个没有数据的简单请求(urlencode),例如 connection.request('POST','/facts/myserver',None,headers) 注意:“/expe
非常感谢您的帮助 您的
curl
命令正在执行GET:
$ curl -v -G -H "Accept: application/json" 'http://example.com/experimental/events' --data-urlencode 'query=["=", "certname", "myserver"]'
* About to connect() to example.com port 80 (#0)
* Trying 192.0.43.10... connected
> GET /experimental/events?query=%5B%22%3D%22%2C%20%22certname%22%2C%20%22myserver%22%5D HTTP/1.1
[...]
发件人:
-G、 --得到
使用此选项时,将使使用-d、-data或-data二进制指定的所有数据在HTTP GET请求中使用,而不是在其他情况下使用的POST请求。数据将附加到带有“?”分隔符的URL
但是Python版本正在做一个POST
。如果执行GET
,它是否有效
url_path = "https://.../events?" + data
server_request = urllib2.Request(url_path)
两者之间唯一的区别是Python将空格编码为+
,而curl
使用%20
。应该以相同的方式对待它们,但如果服务器写得不好,则可能是问题的原因:
import urllib2, urllib
values = {"query": "['=', 'certname', 'myserver']"}
data = urllib.urlencode(values)
print(data)
查询=%5B%27%3D%27%2C+%27certname%27%2C+%27myserver%27%5D
有趣的是
Curl
和Python
是如何编码空格的,这两个结果应该是相同的<很好的接球强>
我将值替换为
值={'query':'[“=”,“certname”,“myserver”]'}
然后生成了Curl
和Python
正在编码的内容,仍然可以看到Python将空格编码为+
(不喜欢这样)
Curl
查询=%5B%22%3D%22%2C%20%22certname%22%2C%20%22myserver%22%5D
Python
查询=%5B%22%3D%22%2C+%22certname%22%2C+%22myserver%22%5D
我使用Curl
one“修复”了这个问题,并对url上的查询进行了如下硬编码(代码并不优雅,但它现在正在工作:-)
再次感谢你 您是否尝试过打印
数据
字符串,看看它是否符合您的预期?你也可以让curl把它扔了。
url_path = "https://.../events?" + data
server_request = urllib2.Request(url_path)
import urllib2, urllib
values = {"query": "['=', 'certname', 'myserver']"}
data = urllib.urlencode(values)
print(data)
import httplib
connection = httplib.HTTPConnection('mydomain.com', 8080)
headers = {'Content-type': 'application/json'}
connection.request('GET', "/experimental/events?query=%5B%22%3D%22%2C%20%22certname%22%2C%20%22" + myserver + "%22%5D", None, headers)
response = connection.getresponse()