Я играю с Google Checkout API и хочу использовать его в приложении Django.Мне нужно отправить данные в Google, используя обычную http-аутентификацию.Я проверял это с помощью curl
, например:
curl -d "$(cat mytest.xml)" -u username:password https://url
И это отправляет содержимое моего тестового XML-файла в Google.И это прекрасно работает!
Но у меня проблемы с переносом этой простой строки на Python.Мне удалось несколькими различными способами (httplib2, urllib2, pycurl) соединиться с паролем и опубликовать что-либо, но Respose всегда 400 BAD REQUEST.
Есть ли эквивалент Python для отправки блока текста в HTTPОсновной сервер аутентификации?У меня кончаются стены, чтобы биться головой.
Извиняюсь за то, что не добавил никакого кода.Вот некоторые из моих лучших хитов.В каждом DATA
является строкой XML.URL
, USERNAME
и PASSWORD
являются постоянными.
req = urllib2.Request(URL)
req.add_header("Authorization", "Basic %s" % base64.encodestring('%s:%s'%(USERNAME, PASSWORD)))
u = urllib2.urlopen(req, DATA)
Дает мне прекрасный HTTP Error 400: Bad Request
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, URL, USERNAME, PASSWORD)
authhandler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(authhandler)
urllib2.install_opener(opener)
pagehandle = urllib2.urlopen(URL, DATA)
Дает HTTP Error 401: Unauthorized
pycurl.global_init(pycurl.GLOBAL_DEFAULT)
c = pycurl.Curl()
c.setopt(pycurl.URL, URL)
c.setopt(pycurl.USERPWD, "%s:%s" % (USERNAME,PASSWORD))
c.setopt(pycurl.POST, 1)
c.setopt(pycurl.HTTPHEADER, ["Content-type: text/xml"])
c.setopt(pycurl.POSTFIELDS, DATA)
b = StringIO.StringIO()
c.setopt(pycurl.WRITEFUNCTION, b.write)
c.perform()
Кажется, что борьба с передачей строки DATA
как POSTFIELD.Я пытался urllib.urlencode()
использовать данные несколькими различными способами, но
h = httplib2.Http()
h.add_credentials(USERNAME, PASSWORD)
print = h.request(URL, "POST", body=base64.encodestring(DATA))
Кажется, что учетные данные ничего не делают - я получаю несанкционированное сообщение от Google.
Есть и другие, но все они основаны на них.