python 使用 urllib2
2024-09-07 15:23:41
使用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)
最新文章
- TabLayout 简单使用。
- UI基础之UITextField相关
- codeforces 723E:One-Way Reform
- vmware centos6.5 net 配置
- Web安全性测试总结
- 改变WPF ListBoxItem的选中样式
- Dev gridControl 添加表标题
- spring mvc 框架核心文档
- 第三方分页控件aspnetPager出现问题解决方法
- PHP MySQL Order By 关键词 之 Order By
- linux常用命令详解 (二)文件处理命令
- java se 另一博客
- bootstrap loadStep流程节点动态显示
- 借用nginx.vim工具进行语法高亮和格式化配置nginx.conf文件
- tmux使用心得
- 创建一个版本库,把文件夹用Git管理起来
- C#-VS配置开发环境-摘
- gradle构建工具入门
- Nuxt.js + koa2 入门
- ios开发之--UICollectionView的使用
热门文章
- [ Openstack ] Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs 高可用集群
- [转]C++ 指针和引用
- opencv3.0 legacy和nonfree丢失
- [BZOJ2631]tree 动态树lct
- HDU 1060 Leftmost Digit (数论,快速幂)
- python——入门系列(一)索引与切片
- Socket学习总结系列(一) -- IM &; Socket
- bzoj 2163: 复杂的大门
- 【概率dp】Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) D. Jon and Orbs
- Delphi 二维码产生和扫描