python http2_python2使用urllib/urllib2实现Http请求
在Http请求中,最为常见的两种请求为GET、POST请求,下面实现方式主要是以urllib/urilib2方式实现。
urllib/urllib2是python中两个内置的模块,要实现Http功能,实现方式以urllib2为主,urllib为辅,在urllib2中提供了一个完整的基础函数urllib2.urlopen(url),通过向指定的url发出请求来获取数据
1、GET请求的实现
import urllib2
response = urllib2.urlopen(“127.0.0.1:8800”)
content = resonse.read()
print content
在上述的实现方式中,可以对分为请求、响应两步,形式如下:
import urllib2
#生成一个请求
requset = urllib2.Requset("127.0.0.1:8800")
#请求与响应
response = urllib2.urlopen(requset)
content = response.read()
2、POST请求的实现
import urllib
import urllib2
url = "127.0.0.1:8800"
#请求数据
postdata = {
'username': 'lxn',
'password': '888888888'
}
#将数据编码
data = urllib.urllencode(postdata)
#生成一个请求并且写入头信息
req = urllib.Request(url, data)
#请求与响应
response = urllib2.urlopen(req)
content = response.read()
上面实现方式就是一个简单的post请求,但是有时可能会出现这种情况:即使POST请求的数据是对的,但是服务器还是拒绝你的访问。 这是为什么呢?问题出现在请求中的头信息中,因为服务器会校验请求头来判断是否来自浏览器的访问,比如在反爬虫的引用中。
我们可以通过加上请求头信息:
import urllib
import urllib2
url = "127.0.0.1:8800"
headers = {
'User-Agent':"Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)",
'Referer':'127.0.0.1:8800'
}
#请求数据
postdata = {
'username': 'lxn',
'password': '888888888'
}
#将数据编码
data = urllib.urllencode(postdata)
#生成一个请求并且写入头信息
req = urllib.Request(url, data,headers)
#请求与响应
response = urllib2.urlopen(req)
content = response.read()
我们也可以使用add_header方式来添加头信息:
import urllib
import urllib2
url = '127.0.0.1:8800/login'
postdata = {'username' : 'lxn',
'password' : '88888888'}
data = urllib.urlencode(postdata)
req = urllib2.Request(url)
# 将user_agent,referer写入头信息
req.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')
req.add_header('Referer','http://www.xxxxxx.com/')
req.add_data(data)
response = urllib2.urlopen(req)
content = response.read()
3、Timeout超时设定
在Python2.6之前的版本,urllib2的API中并没有开放Timeout超时接口,要设定Timeout值,只能更改Socket的全局Timeout值,实例如下:
import urllib2
import socket
socket.setdefaulttimeout(10) # 10 秒钟后超时
urllib2.socket.setdefaulttimeout(10) # 另一种方式
在Python2.6及新的版本中,urlopen函数提供了对Timeout的设置,示例如下:
import urllib2
request=urllib2.Request('127.0.0.1:8800/login')
response = urllib2.urlopen(request,timeout=2) #2秒后超时
content=response.read()
4、获取HTTP响应码
对于200OK来说,只要使用urlopen返回的response对象的getcode()方法就可以得到HTTP的返回码(只针对返回码为200的请求)。但对其他返回码来说,urlopen会抛出异常。这时候,就要检查异常对象的code属性了,示例如下:
import urllib2
try:
response = urllib2.urlopen('127.0.0.1:8800')
print response
except urllib2.HTTPError as e:
if hasattr(e, 'code'):
print 'Error code:',e.code
参考书籍:《Python爬虫开发与项目实战》 — 范传辉 编著
python http2_python2使用urllib/urllib2实现Http请求相关推荐
- python http2_python中 urllib, urllib2, httplib, httplib2 几个库的区别
若只使用python3.X, 下面可以不看了, 记住有个urllib的库就行了 python2.X 有这些库名可用: urllib, urllib2, urllib3, httplib, httpli ...
- python通过get方式,post方式发送http请求和接收http响应-urllib urllib2
python通过get方式,post方式发送http请求和接收http响应-- import urllib模块,urllib2模块, httplib模块 http://blog.163.com/xyc ...
- Py之urllib2:Python库之urllib、urllib2、urllib3系列简介、安装、使用方法之详细攻略
Py之urllib2:Python库之urllib.urllib2.urllib3系列简介.安装.使用方法之详细攻略 目录 urllib2简介 urllib2安装 urllib2使用方法 urllib ...
- python中 urllib, urllib2, httplib, httplib2 几个库的区别
为什么80%的码农都做不了架构师?>>> 若只使用python3.X, 下面可以不看了, 记住有个urllib的库就行了 python2.X 有这些库名可用: urllib, ...
- python urllib urllib2 urllib3 用法 区别
目录 简介 1.打开远程文件 2.获取远程文件 一.urllib 1. urllib.request 1. 发起GET请求 2. 发起POST请求 3. 添加Headers 4. Request对象 ...
- python 网络编程——urllib,urllib2简单运用
知识点一:字典 字典呢就是一种数据结构,我们也可以将它称作映射,可以储存任意类型对象.它是由一个键/值对组成,举个通俗一点的例子,以我们的电话簿为例,值==电话,键==姓名. 需要注意的是在字典中,所 ...
- Python中的urllib,urllib三种不同的请求方式
1.urllib获取服务器的资源 自定义爬虫的重要组件 获取百度首页的资源: #3.x的标准写法 import urllib.request import urllib.parse#百度的首页 fro ...
- Python urllib, urllib2, urllib3 以及 requests 的区别 (附个人一些看法)
urllib python 标准 http 库, 无论是 python 2 还是 python 3 都有. urllib2 urllib2 是 只存在于 python 2 的一个 http 标准库. ...
- pythonrequests发送数据_在python中使用requests 模拟浏览器发送请求数据的方法
在python中使用requests 模拟浏览器发送请求数据的方法 如下所示: import requests url='http://####' proxy={'http':'http://#### ...
最新文章
- 数学上各种空间概念的关系图
- 我同事说我写代码像写诗
- MIT人工突触芯片新突破:指甲大小的芯片有望媲美超算
- 200kb以上图片储存
- 压缩目录Linux常用的几种文件压缩解压方法
- iOS - OC 	术语表
- 【NLP实战系列】Tensorflow命名实体识别实战
- mysql 视图 数据相加_MySQL
- 《java程序设计》第十一周学习小结 201671010130
- 小D课堂 - 零基础入门SpringBoot2.X到实战_第三节SpringBoot热部署devtool和配置文件自动注入实战_15、SpringBoot2.x配置文件讲解...
- 综合金融服务方案模板
- 电话机器人源码部署原理及技术难点
- 利用PLTS对F域测试数据做“AFR”指南
- Python实现pdf转图片
- ajax带token获得返回数据,jquery带token访问接口ajax
- win10任务栏怎么还原到下面_Win10如何快速显示桌面?
- 企业最需要的邮件服务器5大功能模块
- 更改计算机网络密码,宽带密码修改后断网,怎样修改路由器密码
- 特斯拉设计师评苹果造车:痴人说梦,缺乏创新
- 六、MySQL 数据库练习题1(包含前5章练习题目及答案)
热门文章
- Python爬虫+Flask,带你创建车标学习网站
- out.println()方法与%表达式
- 鸿蒙大陆9.1正式版礼包,鸿蒙大陆4.1正式版攻略
- 编写的vs2005水晶报表程序在vs2008下正常使用的一些实现方法
- 网易云音乐HTML5随机音乐播放器源码
- windows 防止电脑远程断线
- 华硕F83VDF安装原版LION10.7.2,及驱动
- R语言学习笔记 -- 【par()函数】篇-《R作图-现代统计图形》
- SRA-Toolkit安装
- 拿下80%直播平台,视频云成了腾讯云突围的秘密武器