2010-08-26 5 views
1

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

Когда я пытаюсь подключиться с помощью 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: [email protected] 
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 = '[email protected]' 
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, поэтому я несанкционирован?
Ваша мудрость будет очень признательна, чтобы спасти мой день.

+0

Ну, я сам решил эту тайну. Все, что я должен был сделать, установив при этом заголовок авторизации в качестве req.add_header ('auth_appkey', api_key) req.add_header ('AUTH_USER', USER) req.add_header ('auth_pass', пароль) Спасибо. – mmrs151

ответ

1

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

+0

Да, я должен был установить все эти три заголовки с помощью req.add_header ('auth_appkey', api_key) req.add_header ('AUTH_USER', USER) req.add_header ('auth_pass', пароль) , чтобы сделать его Работа. – mmrs151

Смежные вопросы