Аутентификация Urllib2 с ключом API - PullRequest
1 голос
/ 26 августа 2010

Я пытаюсь подключиться к radian6 api , для которого требуются auth_appkey, auth_user и auth_pass в качестве шифрования md5.

Когда я пытаюсь подключиться с помощью telnet, я могу успешно получить ответ xml

telnet sandboxapi.radian6.com 80
Trying 142.166.170.31...
Connected to sandboxapi.radian6.com.
Escape character is '^]'.
GET /socialcloud/v1/auth/authenticate HTTP/1.1
host: sandboxapi.radian6.com
auth_appkey: 123456789
auth_user: xxx@xxx.com
auth_pass: 'md5encryptedpassword'

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Date: Thu, 26 Aug 2010 14:17:52 GMT
Content-Type: application/xml
Content-Length: 471

Но когда я пытаюсь сделать то же самое в python со следующим кодом,

import urllib
import urllib2

user = 'xxx@xxx.com'
password = 'md5encryptedpasswrod'
base_url = 'http://sandboxapi.radian6.com/'
api_key = '123456789'

pwman = urllib2.HTTPPasswordMgrWithDefaultRealm()
pwman.add_password(None, base_url, user, password)
auth_handler = urllib2.HTTPBasicAuthHandler(pwman)
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)

req = urllib2.Request('http://sandboxapi.radian6.com/socialcloud/v1/auth/authenticate')
req.add_header('auth_appkey', api_key)
xml = urllib2.urlopen(req).read()

он выдает следующую ошибку:

Traceback (most recent call last):
File "connectapi.py", line 17, in <module>
xml = urllib2.urlopen(req).read()
 File"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 397, in open
response = meth(req, response)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 510, in http_response
'http', request, response, code, msg, hdrs)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 435, in error
return self._call_chain(*args)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 518, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 401: Unauthorized

Я не знаю, что мне не хватает.Является ли это ключом API или зашифрованным паролем md5, поэтому я не авторизован?
Ваша мудрость будет высоко оценена, чтобы спасти мой день.

1 Ответ

1 голос
/ 26 августа 2010

В сеансе telnet вы не устанавливаете заголовок Authorization:, но это то, что HTTPBasicAuthHandler использует.(Вы можете прослушать это, используя wireshark или подобное.) Предположительно, API не использует базовую аутентификацию HTTP, а его вариант домашнего приготовления.Возможно, вы захотите удалить эту строку и установить заголовки HTTP вручную.

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