使用Python请求访问apsis API - 如何正确地使用请求的数据

时间:2017-11-22 11:57:45

标签: python python-3.x python-requests

我一直在尝试使用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)

1 个答案:

答案 0 :(得分:0)

对于在python中使用请求包的POST请求,正确的结构是

requests.post(url, json.dumps(data), headers)

只需为所有要发布的数据创建一个字典,然后在发布之前将其转换为JSON字符串。