Как отправить запрос заголовка HTTP, а не URL-адрес HTTP в Python

Я использую Oauth, и Linkedin требует, чтобы я отправил запрос «заголовка» вместо запроса URL (я понятия не имею, что это значит).

Вот что кто-то говорит в Google:

Если используемая вами библиотека не использует HTTP-заголовки для авторизации, вы не сможете получить доступ к защищенным ресурсам. В большинстве библиотек OAuth есть параметр, который вы можете указать, заставляя его использовать авторизацию на основе заголовков.

Во всяком случае, я указал это заголовкам! Я знаю, как поменять его на заголовки. Единственная проблема ... Я не знаю, как ЗАПРОСАТЬ материал с помощью метода заголовка.

Ранее, без метода заголовка:

url = oauth_request.to_url()
connection.request(oauth_request.http_method,url)
response = connection.getresponse()
s = response.read()

Сейчас:

url = oauth_request.to_header()
connection.request(oauth_request.http_method,url)
response = connection.getresponse()
s = response.read()

Но когда я его запускаю, я получаю странную обратную связь.

File "/usr/lib/python2.6/httplib.py" in request
  874.             self._send_request(method, url, body, headers)
File "/usr/lib/python2.6/httplib.py" in _send_request
  891.         self.putrequest(method, url, **skips)
File "/usr/lib/python2.6/httplib.py" in putrequest
  807.                 if url.startswith('http'):

Exception Type: AttributeError at /g/
Exception Value: 'dict' object has no attribute 'startswith'

person TIMEX    schedule 04.02.2010    source источник
comment
Я решил это. Я просто поставил третий аргумент - заголовки.   -  person TIMEX    schedule 04.02.2010


Ответы (2)


Я не знаю об этой конкретной библиотеке oauth, которую вы используете, поэтому не могу это комментировать.

Но,

  • Из трассировки можно четко определить, что oauth_request.to_header() возвращает словарь, а не строку, которую ожидает httplib.py.

  • Способ установки учетных данных аутентификации в заголовках http выглядит следующим образом:

из этого вопроса

password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
top_level_url = "http://example.com/"
password_mgr.add_password(None, top_level_url, 'user', 'password')
handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(urllib2.HTTPHandler, handler)
request = urllib2.Request(url)

Надеюсь, поможет!

person lprsd    schedule 04.02.2010

Ваш метод connection.request может принимать заголовки HTTP:

connection.request (метод, URL, тело = тело, заголовки = {'Авторизация': заголовок})

Для OAuth есть несколько полей с заголовком:

Область OAuth = "http://api.linkedin.com", oauth_consumer_key = "##########", oauth_nonce = "############", oauth_signature = " ######## ", oauth_signature_method =" HMAC-SHA1 ", oauth_timestamp =" ######### ", oauth_token =" ######### ", oauth_version =" 1.0 "

Все #### - это то, что вам нужно иметь или создавать.

person joulesm    schedule 23.02.2012