我一直在尝试使用python请求模块访问apsis api; http://se.apidoc.anpdm.com/Browse/Method/MailingListService/CreateMailinglist
我过去能够通过apsis api my api密钥并获取整个帐户邮件列表 http://se.apidoc.anpdm.com/Browse/Method/MailingListService/GetAllMailingLists
然而我遇到问题传递api的请求体参数,我可以看到它正确验证但它也返回一个错误的输入(400)当我尝试传递数据 我的代码目前;
import requests
import csv
import json
import os
API_KEY ="ThEApiKeyGoEsHerE"
headers = {
'Accept':'application/json',
'Content-Type':'application/json',
'User-Agent':'ApsisRestClient- ver1.0.0.0 (Microsoft Windows NT 6.3.9600.0)',
'Authorization':'Basic NmJhMzIxYTEtZjUxNi00ZGZkLWFiMmYtNGYyOWQzYTExYmY2Og==',
'Accept-Encoding':'gzip,deflate',
'Host':'se.api.anpdm.com'
}
theRead = open(os.path.dirname(os.path.realpath(__file__)) + "tester.txt","r", newline='')
message = theRead.read().splitlines()
params= dict(
CharacterSet= message[0],
Description= message[1],
FolderID= message[2],
FromEmail= message[3],
FromName= message[4],
Name= message[5],
ReplyToEmail= message[6]
)
params=json.dumps(params)
params=json.loads(params)
r = requests.post('http://se.api.anpdm.com/v1/mailinglists/', headers=headers ,data={'username' : API_KEY, 'password' : ''}, params=params)
print(r.status_code)
我也尝试过各种其他方式;
r = requests.post('http://se.api.anpdm.com/v1/mailinglists/', headers=headers ,data={'username' : API_KEY, 'password' : ''}, json=params)
和
params={
"CharacterSet": message[0],
"Description": message[1],
"FolderID": message[2],
"FromEmail": message[3],
"FromName": message[4],
"Name": message[5],
"ReplyToEmail": message[6]
}
和
r = requests.post('http://se.api.anpdm.com/v1/mailinglists/', headers=headers, data={'username' : API_KEY, 'password' : '', "FromEmail": message[3], "FromName": message[4], "Name": message[5]})
任何人都可以帮助我理解我应该如何通过他们的api这个额外的数据? 我还尝试在标题中包含额外的数据,但现在可以使用。
我现在尝试了以下编辑;
data= {
'CharacterSet': message[0],
'Description': message[1],
'FolderID': message[2],
'FromEmail': message[3],
'FromName': message[4],
'Name': message[5],
'ReplyToEmail': message[6],
'username' : API_KEY,
'password' : ''
}
r = requests.post('http://se.api.anpdm.com/v1/mailinglists/', json.dumps(data), headers=headers )
print(r.status_code)
我也试过上面的代码
r = requests.post('http://se.api.anpdm.com/v1/mailinglists/', data=json.dumps(data), headers=headers )
print(r.status_code)
解决方案: 好吧,伙计们已经弄明白了这个问题; 如果您在脚本末尾包含以下代码,则api会向您发送有用的信息;
print(r.text)
原来我试图通过api无效的电子邮件,它不喜欢.. 适用于那些想要同样使用此API的人的代码;
import requests
import csv
import json
import os
API_KEY ="ThEApiKeyGoEsHerE"
headers = {
'Accept':'application/json',
'Content-Type':'application/json',
'User-Agent':'ApsisRestClient- ver1.0.0.0 (Microsoft Windows NT 6.3.9600.0)',
'Authorization':'Basic NmJhMzIxYTEtZjUxNi00ZGZkLWFiMmYtNGYyOWQzYTExYmY2Og==',
'Accept-Encoding':'gzip,deflate',
'Host':'se.api.anpdm.com'
}
theRead = open(os.path.dirname(os.path.realpath(__file__)) + "tester.txt","r", newline='')
message = theRead.read().splitlines()
data= {
'CharacterSet': message[0],
'Description': message[1],
'FolderID': message[2],
'FromEmail': message[3],
'FromName': message[4],
'Name': message[5],
'ReplyToEmail': message[6],
'username' : API_KEY,
'password' : ''
}
r = requests.post('http://se.api.anpdm.com/v1/mailinglists/', data=json.dumps(data), headers=headers )
print(r.status_code)
答案 0 :(得分:0)
对于在python中使用请求包的POST请求,正确的结构是
requests.post(url, json.dumps(data), headers)
只需为所有要发布的数据创建一个字典,然后在发布之前将其转换为JSON字符串。