使用Python将json联系人列表发送到Qualtrics API时,出现Content-Type错误



我正在尝试将联系人导入Qualtrics中的联系人列表。我用python来做这个。

Token = 'MyToken' #when running the code I put in my actual token and id
ContactsID = 'MyContactsID'
data = open('contacts.json', 'rb')
headers = {'X-API-TOKEN': Token, 'Content-Type':'application/json',}
r = requests.post('https://az1.qualtrics.com/API/v3/mailinglists/' + ContactsID +'/contactimports', headers=headers, data=data)
r.text

这段代码给了我以下错误:'{"meta":{"httpStatus":"400 -错误请求","error":{"errorMessage":"无效的内容类型。预期=多部分/application/json格式发现="、"错误代码":"RP_0.1}, requestId":零}}

我将内容类型更改为multipart/form-data,它表示期待并收到响应"413",这意味着"请求正文太大"。这种情况也可能发生在多部分/表单数据请求格式错误的情况下。"

我已经测试了我的json并验证它是有效的。此外,我不知道为什么请求体会太大,因为我只尝试导入13个联系人。什么好主意吗?

在Qualtrics Support的帮助下,我最终能够使以下代码工作:

Token = 'MyToken' #when running the code I put in my actual token and id
ContactsID = 'MyContactsID'
url = "https://az1.qualtrics.com/API/v3/mailinglists/" + ContactsID + "/contactimports/"
headers = {
   'content-type': "multipart/form-data; boundary=---BOUNDRY",
   'x-api-token': "Token"
   } 
files = {'contacts': ('contacts', open('contacts.json', 'rb'), 'application/json')}
request = requests.post(url, headers=headers, files=files)
print(request.text)

请注意,如果您想使用此代码,您需要将URL中的"az1"更改为您自己的Qualtrics数据中心ID。

您需要在多部分请求中使用files = ..:

Token = 'MyToken' #when running the code I put in my actual token and id
ContactsID = 'MyContactsID'
data = open('contacts.json', 'rb')
headers = {'X-API-TOKEN': Token}
r = requests.post('https://az1.qualtrics.com/API/v3/mailinglists/' + ContactsID +'/contactimports',files={"file":data}, headers=headers)
r.text

一旦你做了请求将照顾剩下的:

In [36]: url = 'http://httpbin.org/post' 
In [37]: headers = {'X-API-TOKEN': "123456789"}    
In [38]: files = {'file': open('a.csv', 'rb')}    
In [39]: r = requests.post(url, files=files, headers=headers)
In [40]: print r.text
{
  "args": {}, 
  "data": "", 
  "files": {
    "file": "a,b,cn1,2,3"
  }, 
  "form": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "152", 
    "Content-Type": "multipart/form-data; boundary=3830dbe5fa6141f69d3d85dee4ba6e78", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.10.0", 
    "X-Api-Token": "123456789"
  }, 
  "json": null, 
  "origin": "51.171.98.185", 
  "url": "http://httpbin.org/post"
}

In [41]: print(r.request.body)
--3830dbe5fa6141f69d3d85dee4ba6e78
Content-Disposition: form-data; name="file"; filename="a.csv"
a,b,c
1,2,3
--3830dbe5fa6141f69d3d85dee4ba6e78--

看看文档,你实际上想要更接近:

Token = 'MyToken' #when running the code I put in my actual token and id
ContactsID = 'MyContactsID'
data = open('contacts.json', 'rb')
files = {'file': ('contact', data ,'application/json', {'X-API-TOKEN': Token})}
r = requests.post('https://az1.qualtrics.com/API/v3/mailinglists/' + ContactsID +'/contactimports',files=files)

最新更新