在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请求相关推荐

  1. python http2_python中 urllib, urllib2, httplib, httplib2 几个库的区别

    若只使用python3.X, 下面可以不看了, 记住有个urllib的库就行了 python2.X 有这些库名可用: urllib, urllib2, urllib3, httplib, httpli ...

  2. python通过get方式,post方式发送http请求和接收http响应-urllib urllib2

    python通过get方式,post方式发送http请求和接收http响应-- import urllib模块,urllib2模块, httplib模块 http://blog.163.com/xyc ...

  3. Py之urllib2:Python库之urllib、urllib2、urllib3系列简介、安装、使用方法之详细攻略

    Py之urllib2:Python库之urllib.urllib2.urllib3系列简介.安装.使用方法之详细攻略 目录 urllib2简介 urllib2安装 urllib2使用方法 urllib ...

  4. python中 urllib, urllib2, httplib, httplib2 几个库的区别

    为什么80%的码农都做不了架构师?>>>    若只使用python3.X, 下面可以不看了, 记住有个urllib的库就行了 python2.X 有这些库名可用: urllib, ...

  5. python urllib urllib2 urllib3 用法 区别

    目录 简介 1.打开远程文件 2.获取远程文件 一.urllib 1. urllib.request 1. 发起GET请求 2. 发起POST请求 3. 添加Headers 4. Request对象 ...

  6. python 网络编程——urllib,urllib2简单运用

    知识点一:字典 字典呢就是一种数据结构,我们也可以将它称作映射,可以储存任意类型对象.它是由一个键/值对组成,举个通俗一点的例子,以我们的电话簿为例,值==电话,键==姓名. 需要注意的是在字典中,所 ...

  7. Python中的urllib,urllib三种不同的请求方式

    1.urllib获取服务器的资源 自定义爬虫的重要组件 获取百度首页的资源: #3.x的标准写法 import urllib.request import urllib.parse#百度的首页 fro ...

  8. Python urllib, urllib2, urllib3 以及 requests 的区别 (附个人一些看法)

    urllib python 标准 http 库, 无论是 python 2 还是 python 3 都有. urllib2 urllib2 是 只存在于 python 2 的一个 http 标准库. ...

  9. pythonrequests发送数据_在python中使用requests 模拟浏览器发送请求数据的方法

    在python中使用requests 模拟浏览器发送请求数据的方法 如下所示: import requests url='http://####' proxy={'http':'http://#### ...

最新文章

  1. 数学上各种空间概念的关系图
  2. 我同事说我写代码像写诗
  3. MIT人工突触芯片新突破:指甲大小的芯片有望媲美超算
  4. 200kb以上图片储存
  5. 压缩目录Linux常用的几种文件压缩解压方法
  6. iOS - OC 术语表
  7. 【NLP实战系列】Tensorflow命名实体识别实战
  8. mysql 视图 数据相加_MySQL
  9. 《java程序设计》第十一周学习小结 201671010130
  10. 小D课堂 - 零基础入门SpringBoot2.X到实战_第三节SpringBoot热部署devtool和配置文件自动注入实战_15、SpringBoot2.x配置文件讲解...
  11. 综合金融服务方案模板
  12. 电话机器人源码部署原理及技术难点
  13. 利用PLTS对F域测试数据做“AFR”指南
  14. Python实现pdf转图片
  15. ajax带token获得返回数据,jquery带token访问接口ajax
  16. win10任务栏怎么还原到下面_Win10如何快速显示桌面?
  17. 企业最需要的邮件服务器5大功能模块
  18. 更改计算机网络密码,宽带密码修改后断网,怎样修改路由器密码
  19. 特斯拉设计师评苹果造车:痴人说梦,缺乏创新
  20. 六、MySQL 数据库练习题1(包含前5章练习题目及答案)

热门文章

  1. Python爬虫+Flask,带你创建车标学习网站
  2. out.println()方法与%表达式
  3. 鸿蒙大陆9.1正式版礼包,鸿蒙大陆4.1正式版攻略
  4. 编写的vs2005水晶报表程序在vs2008下正常使用的一些实现方法
  5. 网易云音乐HTML5随机音乐播放器源码
  6. windows 防止电脑远程断线
  7. 华硕F83VDF安装原版LION10.7.2,及驱动
  8. R语言学习笔记 -- 【par()函数】篇-《R作图-现代统计图形》
  9. SRA-Toolkit安装
  10. 拿下80%直播平台,视频云成了腾讯云突围的秘密武器