Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将CURL命令转换为Python_Python_Curl - Fatal编程技术网

如何将CURL命令转换为Python

如何将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命令转换为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
命令正在执行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()