Python Curl命令适用于smartsheet,但pycurl命令不适用于smartsheet

Python Curl命令适用于smartsheet,但pycurl命令不适用于smartsheet,python,curl,pycurl,smartsheet-api-1.1,smartsheet-api-2.0,Python,Curl,Pycurl,Smartsheet Api 1.1,Smartsheet Api 2.0,我能够使用Curl命令成功更新smartsheet: curl https://api.smartsheet.com/2.0/sheets/sheetID/rows \ > -H "Authorization: Bearer token" \ > -H "Content-Type: application/json" \ > -X PUT \ > -d '[{"id": rid, "locked" : false}]' 但是,当我尝试使用Pycurl在python脚本中

我能够使用Curl命令成功更新smartsheet:

curl https://api.smartsheet.com/2.0/sheets/sheetID/rows \
> -H "Authorization: Bearer token" \
> -H "Content-Type: application/json" \
> -X PUT \
> -d '[{"id": rid, "locked" : false}]'
但是,当我尝试使用Pycurl在python脚本中执行同样的操作时:我得到了授权错误。我不确定我在这里做错了什么

c = pycurl.Curl()
c.setopt(pycurl.URL,url)
c.setopt(pycurl.HTTPHEADER, ['Authorization: Bearer ' + token])
c.setopt(pycurl.HTTPHEADER, ['Content-Type: application/json', 'Accept: application/json'])
data = json.dumps({"id": rid, "locked": False })
c.setopt(pycurl.CUSTOMREQUEST, "PUT")
c.setopt(pycurl.POSTFIELDS,data)
c.setopt(pycurl.POSTFIELDSIZE, len(data))
c.setopt(pycurl.VERBOSE, 1)
c.perform()
c.close()
我得到一个错误:

* About to connect() to api.smartsheet.com port 443 (#0)
*   Trying 198.101.138.130...
* Connected to api.smartsheet.com (198.101.138.130) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
* Server certificate:
*   subject: CN=api.smartsheet.com,O="Smartsheet.com, Inc.",L=Bellevue,ST=Washington,C=US,serialNumber=6#####7,businessCategory=Private Organization,incorporationState=Washington,incorporationCountry=US
*   start date: Jul 09 00:00:00 2015 GMT
*   expire date: Jul 08 23:59:59 2017 GMT
*   common name: api.smartsheet.com
*   issuer: CN=Symantec Class 3 EV SSL CA - G3,OU=Symantec Trust Network,O=Symantec Corporation,C=US
> POST /2.0/sheets/sheetid/rows HTTP/1.1
User-Agent: PycURL/7.29.0
Host: api.smartsheet.com
Content-Type: application/json
Accept: application/json
Content-Length: 40

* upload completely sent off: 40 out of 40 bytes
< HTTP/1.1 403 Forbidden
< Date: Mon, 15 Aug 2016 15:17:55 GMT
< Content-Type: application/json;charset=UTF-8
< Content-Length: 116
< Connection: close
< 
{
  "errorCode" : 1004,
  "message" : "You are not authorized to perform this action.",
  "refId" : "za6gmwnreg78"
* Closing connection 0
}403
*即将()连接到api.smartsheet.com端口443(#0)
*正在尝试198.101.138.130。。。
*连接到api.smartsheet.com(198.101.138.130)端口443(#0)
*使用certpath:sql:/etc/pki/nssdb初始化NSS
*CAfile:/etc/pki/tls/certs/ca-bundle.crt
卡帕斯:没有
*使用TLS\u ECDHE\u RSA\u和\u AES\u 128\u CBC\u SHA的SSL连接
*服务器证书:
*主题:CN=api.smartsheet.com,O=“smartsheet.com,Inc.”,L=Bellevue,ST=Washington,C=US,serialNumber=6####7,businessCategory=Private Organization,incorporationState=Washington,incorporationCountry=US
*开始日期:2015年7月9日00:00:00 GMT
*到期日期:2017年7月8日23:59:59 GMT
*通用名称:api.smartsheet.com
*发行人:CN=Symantec 3级电动汽车SSL CA-G3,OU=Symantec信任网络,O=Symantec Corporation,C=US
>POST/2.0/sheets/sheetid/rows HTTP/1.1
用户代理:PycURL/7.29.0
主持人:api.smartsheet.com
内容类型:application/json
接受:application/json
内容长度:40
*上传完全发送:40个字节中的40个

我不确定出了什么问题。如果有人能建议可以做什么(同时仍然使用pycurl)或其他解决方法,那就太好了!请帮忙!谢谢

我认为问题是由调用
c.setopt(pycurl.HTTPHEADER,…)
两次引起的,第二次调用覆盖了第一次调用中的auth令牌集

尝试将两个
c.setopt
调用替换为以下内容:

c.setopt(pycurl.HTTPHEADER,['Authorization:Bearer'+令牌,'Content Type:application/json','Accept:application/json']))

我认为问题是由调用
c.setopt(pycurl.HTTPHEADER,…)
两次引起的,第二次调用覆盖了第一次调用中的auth令牌集

尝试将两个
c.setopt
调用替换为以下内容:

c.setopt(pycurl.HTTPHEADER,['Authorization:Bearer'+令牌,'Content Type:application/json','Accept:application/json']))