2015-08-20 77 views
2

我有这个卷曲命令,我想知道如果我已经正确地将其转换为pycurl。将卷曲转换为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(

回答

0

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

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

+0

你好Daniel。我明白你的意思,但我发现很难使用libcurl获取模板。我对pycurl比较陌生。请你给我一个更详细的解释。谢谢你帮助我。 – HighonH

+0

由于输出语法不完全是pycurl,所以主要使用模板来获取选项名称和参数集合。 –

0

我会亲自用卓越的requests

import requests 
import requests.auth 
import json 


def assign(key, name): 
    url = "http://xxx/rest/api/2/issue/" + key 
    headers = {'Content-type': 'application/json', 'Accept': 'application/json'} 
    data = json.dumps({"fields": {"assignee": {"name": name}}}) 

    r = requests.put(url, data=data, headers=headers, auth=requests.auth.HTTPBasicAuth('fred', 'fred')) 

    print(r.status_code) 
    print(r.json()) 
+0

我必须遵循有关进口和“导入请求”不支持很多限制。有没有其他的方式来使用pycurl和json来做到这一点。 – HighonH

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发明指点出来