Я экспериментирую с Google Checkout API, и я хочу вставить его в приложение Django. Мне нужно отправить данные в Google с использованием базовой HTTP-аутентификации. Я тестировал это с помощью curl
вот так:
curl -d "$(cat mytest.xml)" -u username:password https://url
И это отправляет содержимое моего тестового XML-файла в Google. И работает нормально!
Но у меня проблемы с переносом этой простой строки на Python. Я использовал несколько разных способов (httplib2, urllib2, pycurl) подключения с паролем и публикации чего-то, но ответ всегда был 400 ПЛОХОЙ ЗАПРОС.
Существует ли эквивалент Python для отправки блока текста на сервер аутентификации HTTP Basic? Я выбегаю из стен, чтобы биться головой.
Приносим извинения за то, что не добавили код. Вот некоторые из моих лучших хитов. В каждом из них DATA
представляет собой строку XML. URL-адреса
, ИМЯ ПОЛЬЗОВАТЕЛЯ
и ПАРОЛЬ
являются постоянными.
req = urllib2.Request(URL)
req.add_header("Authorization", "Basic %s" % base64.encodestring('%s:%s'%(USERNAME, PASSWORD)))
u = urllib2.urlopen(req, DATA)
Выдает мне прекрасную Ошибка HTTP 400: неверный запрос
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 401: Неавторизовано
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.
Есть еще кое-что, но все они основаны на них.