Python模拟HTTPS请求返回HTTP 401 unauthorized错误

http://blog.csdn.net/testcs_dn/article/details/50451762


Python模拟HTTPS请求返回HTTP 401 unauthorized错误

在文章 Python Web中REST API使用示例——基于云平台+云服务打造自己的在线翻译工具 中,用到了Python模拟HTTPS请求的功能;

开始是使用的 httplib模块,代码如下:

[python]  view plain  copy
  1. header = {"Content-type""application/json""Accept""*/*" }  
  2. params = { 'source':'en''target':'es''text':match.group(1) }          
  3. data = urllib.urlencode(params)  
  4. surl = urlparse('https://gateway.watsonplatform.net/language-translation/api/v2/translate')  
  5. #surl = urlparse('https://www.baidu.com/')  
  6. resContent = ''  
  7.   
  8. try:  
  9.     conn = httplib.HTTPSConnection(surl.netloc)   
  10.     conn.request('GET', surl.path + '?' + data)  
  11.     response = conn.getresponse()  
  12.     resContent = data + "<br />" + getAllAttrs(response) #response.read() #  
  13. except:  
  14.     info=sys.exc_info()  
  15.     resContent = getAllAttrs(info[0]) + getAllAttrs(info[1])  
后来经过一番搜索发现,httplib根本不支持需要身份验证的这种请求;

改为以下代码成功:

[python]  view plain  copy
  1. params = { 'source':'en''target':'es''text':match.group(1) }          
  2.             surl = 'https://gateway.watsonplatform.net/language-translation/api/v2/translate?' + urllib.urlencode(params)  
  3.             resContent = ''  
  4.               
  5.             try:  
  6.                 passman = urllib2.HTTPPasswordMgrWithDefaultRealm() #创建域验证对象  
  7.                 passman.add_password(None, surl, "c9819718-4660-441c-9df7-07398950ea44""qUvrJPSdPgOx"#设置域地址,用户名及密码  
  8.                 auth_handler = urllib2.HTTPBasicAuthHandler(passman) #生成处理与远程主机的身份验证的处理程序  
  9.                 opener = urllib2.build_opener(auth_handler) #返回一个openerDirector实例  
  10.                 urllib2.install_opener(opener) #安装一个openerDirector实例作为默认的开启者。  
  11.                 response = urllib2.urlopen(surl) #打开URL链接,返回Response对象  
  12.                 resContent = response.read() #读取响应内容  
  13.             except:  
  14.                 info=sys.exc_info()  
  15.                 resContent = getAllAttrs(info[0]) + getAllAttrs(info[1]) #获取异常的详细信息  
支持需要身份验证的请求的模块有以下几个:

httplib2,urllib2,requests,pycurl

但我安装的Python 2.7.10默认只带了 urllib2,所以就选择使用它了。

你可能感兴趣的:(Python模拟HTTPS请求返回HTTP 401 unauthorized错误)