与API密钥认证的urllib2 [英] Urllib2 authentication with API key
问题描述
我试图连接到 Radian6的API ,这就需要auth_appkey,AUTH_USER和作为AUTH_PASS MD5加密。
I am trying to connect to radian6 api, which requires the auth_appkey, auth_user and auth_pass as md5 encryption.
当我尝试使用telnet连接我可以成功地得到响应XML
When I am trying to connect using telnet I can get the response xml successfully
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具有以下code,
But when I am trying the same in python with the following code,
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()
它抛出下面的错误跟踪,
it is throwing the following error trace,
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加密的密码,这就是为什么我被未经授权的?结果
你的智慧会pciated救我一天多少AP $ P $。
I don't know what I am missing. Is it the API key or md5 encrypted password that is why I am being unauthorized?
Your wisdom will be much appreciated to save my day.
推荐答案
在你的远程登录
会话,你不设置授权方式:
头,但是这就是 HTTPBasicAuthHandler
使用。 (你可以在听这个使用 Wireshark的
或相似的。)presumably API不使用HTTP基本身份验证,但其家庭酿造变种。你可能想删除该行并手动设置HTTP标头。
In your telnet
session, you're not setting the Authorization:
header, but that's what HTTPBasicAuthHandler
uses. (You could listen in on this using wireshark
or similar.) Presumably the API doesn't use HTTP Basic Authentication but its home-brew variant. You probably want to drop that line and set the HTTP headers manually.
这篇关于与API密钥认证的urllib2的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!