Я пытаюсь подключиться к FreshBooks API
с использованием модуля python и httplib
. Мне удалось выполнить эту работу с пакетом Requests
, но поскольку я стартер и хочу учиться, я бы также хотел, чтобы он работал, используя стандартную библиотеку Python.Не удается получить успешный ответ с помощью httplib в Python
Так что это код, использующий HTTPLIB:
import base64, httplib
# test script created to connect with my test Freshbooks account
headers = {}
body = '/api/2.1/xml-in'
headers["Authorization"] = "Basic {0}".format(
base64.b64encode("{0}:{1}".format('I have put here my Auth Token', 'user')))
headers["Content-type"] = "application/xml"
# the XML we ll send to Freshbooks
XML = """<?xml version="1.0" encoding="utf-8"?>
<request method="task.list">
<page>1</page>
<per_page>15</per_page>
</request>"""
# Enable the job
conn = httplib.HTTPSConnection('devjam-billing.freshbooks.com')
conn.request('POST', body, None, headers)
resp = conn.getresponse()
print resp.status
conn.send(XML)
print resp.read()
conn.close()
И это то, что возвращает Freshbooks:
200
<?xml version="1.0" encoding="utf-8"?>
<response xmlns="http://www.freshbooks.com/api/" status="fail">
<error>Your XML is not formatted correctly.</error>
<code>40010</code>
</response
На мой второй сценарий, где я использовал пакеты, которые я имел тот же самый ответ, который я установил добавление заголовков в post()
:
import requests
XML = """<?xml version="1.0" encoding="utf-8"?>
<request method="task.list">
<page>1</page>
<per_page>15</per_page>
</request>"""
headers = {'Content-Type': 'application/xml'} # set what your server accepts
r = requests.post('https://devjam-billing.freshbooks.com/api/2.1/xml-in', auth= ('my auth token', 'user'), data=XML, headers=headers)
print r.status_code
print r.headers['content-type']
# get the response
print r.text
Я пробовал на первом сделать что-то подобное, добавив:
headers["Content-type"] = "application/xml"
без успеха.
Любые идеи? Кроме того, b64encode является безопасным вариантом безопасности для кодирования или есть более безопасный способ сделать это? Благодарю.