使用basic auth 的3种方式

1. 设置header

import urllib2
from base64 import encodestring headers = {'Content-Type': 'application/json;charset=UTF-8',
'Authorization': 'Basic %s'% encodestring('%s:%s'%(user, password))[:-1]} def http_request(url, data_json, headers):
# data_json is json string, if it is not null then this is a POST request else this is a GET request
req = urllib2.Request(url, data_json, headers=headers)
response = urllib2.urlopen(req)
return response.getcode(), response.read()

2. 使用 HTTPBasicAuthHandler, 并install。执行认证一次,可以多次访问

import urllib2
# Create an OpenerDirector with support for Basic HTTP Authentication...
auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(realm='PDQ Application',
uri='https://mahler:8092/site-updates.py',
user='klem',
passwd='kadidd!ehopper')
opener = urllib2.build_opener(auth_handler)
# ...and install it globally so it can be used with urlopen.
urllib2.install_opener(opener) # 可以以配置的用户,依次访问多个url
urllib2.urlopen('http://www.example.com/login.html')
urllib2.urlopen('http://www.example.com/login.html')

3.

含有身份验证的网页,无论是 http 还是 https, 以下代码均适用。(如果还是报权限问题,有可能是 header 问题。)

import urllib2

class WebRequester(object):
def __init__(self, top_level_url, user, passwd):
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_mgr.add_password(None, top_level_url, user, passwd)
handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(handler)
urllib2.install_opener(opener) def get_page(self, url):
fd = urllib2.urlopen(url)
return fd.read().encode('utf-8')

说明:在init中,install 了一个openner, 作为default 的openner, 之后的请求默认由它发出(如果不另外声明),urlopen 会使用该openner。

但是 open 不会使用它。所以,临时请求网页,可以直接使用 urllib2.build_opener().open(url)。

opener = urllib2.build_opener()
fd = opener.open(url)

最新文章

  1. TabLayout 简单使用。
  2. UI基础之UITextField相关
  3. codeforces 723E:One-Way Reform
  4. vmware centos6.5 net 配置
  5. Web安全性测试总结
  6. 改变WPF ListBoxItem的选中样式
  7. Dev gridControl 添加表标题
  8. spring mvc 框架核心文档
  9. 第三方分页控件aspnetPager出现问题解决方法
  10. PHP MySQL Order By 关键词 之 Order By
  11. linux常用命令详解 (二)文件处理命令
  12. java se 另一博客
  13. bootstrap loadStep流程节点动态显示
  14. 借用nginx.vim工具进行语法高亮和格式化配置nginx.conf文件
  15. tmux使用心得
  16. 创建一个版本库,把文件夹用Git管理起来
  17. C#-VS配置开发环境-摘
  18. gradle构建工具入门
  19. Nuxt.js + koa2 入门
  20. ios开发之--UICollectionView的使用

热门文章

  1. [ Openstack ] Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs 高可用集群
  2. [转]C++ 指针和引用
  3. opencv3.0 legacy和nonfree丢失
  4. [BZOJ2631]tree 动态树lct
  5. HDU 1060 Leftmost Digit (数论,快速幂)
  6. python——入门系列(一)索引与切片
  7. Socket学习总结系列(一) -- IM & Socket
  8. bzoj 2163: 复杂的大门
  9. 【概率dp】Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) D. Jon and Orbs
  10. Delphi 二维码产生和扫描