将curl转换为Pycurl。

时间:2015-08-20 20:53:47

标签: python curl

我有这个curl命令,我想知道我是否已将其正确转换为pycurl。

curl命令

curl -D- -u fred:fred -X PUT --data{see below} -H "Content-Type:application/json" http://kelpie9:8081/rest/api/2/issue/QA-31

{
 "fields":
{
"assignee":{"name":"harry"}
}
}

python代码

def assign(self, key, name):
data = json.dumps({"fields":{"assignee":{"name":name}}}) 
c= pycurl.Curl()
c.setopt(pycurl.VERBOSE, 1)
c.setopt(pycurl.URL, "http://xxx/rest/api/2/issue/"+ key )
c.setopt(pycurl.HTTPHEADER, ['Content-Type: application/json', 'Accept: application/json'])
c.setopt(pycurl.USERPWD, "****") 
c.setopt(pycurl.PUT, 1) 
c.setopt(pycurl.POSTFIELDS,data)
c.perform(

3 个答案:

答案 0 :(得分:0)

我个人通过使用非凡的requests

来实现这一目标
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?test/(.*?)/?$ /test.php?whatever=$1 [L]

答案 1 :(得分:0)

Nopes。首先:使用curl的--libcurl选项获取第一个模板。

然后,“-X PUT”转换为CUSTOMREQUEST设置为“PUT”,仅更改实际方法关键字。

答案 2 :(得分:0)

curl -j --libcurl git.txt -D- -u fred:fred -X PUT --data"{\"fields\":{\"assignee\":{\"name\":\"FRED\"}}}" -H "Content-Type:application/json" http://kelpie9:8081/rest/api/2/issue/QA-31

这给出了git.txt中的模板。

同样在数据字段中,内部引号必须如上所示进行转义。

下面附有工作代码。

   def assign(self, key, name):
    self._startCurl()         
    self.c.setopt(pycurl.URL, "http://xxx/rest/api/2/issue/"+ key )
    self.c.setopt(pycurl.HTTPHEADER, ['Content-Type: application/json', 'Accept: application/json'])
    self.c.setopt(pycurl.USERPWD, "fred:fred") 
    self.c.setopt(pycurl.CUSTOMREQUEST, "PUT")
    data = json.dumps({"fields":{"assignee":{"name":name}}})
    self.c.setopt(pycurl.POSTFIELDS,data)        
    self.c.perform()
    self.c.close()

感谢Daniel Stenberg指出