Как отправить запрос заголовка HTTP, а не HTTP URL в Python - PullRequest
0 голосов
/ 04 февраля 2010

Я делаю 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'

Ответы [ 2 ]

2 голосов
/ 04 февраля 2010

Я не знаю, какую именно библиотеку 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)

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

0 голосов
/ 24 февраля 2012

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

connection.request (метод, url, body = body, headers = {'Authorization': header})

Для OAuthЕсть несколько полей, которые имеет заголовок:

OAuth realm = "http://api.linkedin.com", oauth_consumer_key =" ########## ", oauth_nonce ="############ "oauth_signature =" ######## ", oauth_signature_method =" HMAC-SHA1 ", oauth_timestamp =" ######### ", oauth_token= "#########", oauth_version = "1.0"

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...