python中urllib2的学习

学习urllib模块一定要了解的http中的get和post方法:

get方法:通常用于请求服务器发送某个资源,而且应该是安全的和幂等的。

post方法:向服务器提交数据,比如完成表单数据的提交,将数据提交给服务器处理

get和post方法的区别:

  • get请求的数据会附在url之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,post则把提交的数据放置在HTTP包的包体中
  • post方法的安全性要比get的安全性高

urlopen函数:

urlopen(url,data=None,timeout=<object object>)

传递一个URL参数,添加post需要的data,返回值是一个类似于file的对象,可以通过文件操作来操作这个对象

  • read(),readline(),readlines(),fileno(),close():使用方法和python文件操作相同

urlib2.urlopen()参数可以用一个request的对象来代替URL,而且增加了一个URLError异常,对于HTTP协议的错误,增加了一个HTTPError的异常,其中这个HTTPError自动变成一个合法的response来返回。

import urllib2

url = "http://www.baidu.com"
response = urllib2.urlopen(url)
print response.info()

其中,response.info()可以获取返回来的http response head 的信息,response.read()用来获取response body 的信息。

如果默认只有一个url参数,那么默认是使用HTTP GET的方法来访问url

urlopen()还可以使用request对象作为参数,不过首先我们得先创建一个request的对象,通过Request类来完成,Request类有很多方法,比较常用的是add_header(self,key,val)方法,这个方法可以添加我们自己的http header。

import urllib2

request = urllib2.Request("http://www.baidu.com")
request.add_header('User-agent','Internet Explorer')
try:
    response = urllib2.urlopen(request)
except urllib2.URLError, e:
    print e.code

headers = response.info()
data = response.read()

这样http request头部中的user-agent就变成了Internet Explorer,如果创建request时不添加data,默认使用get方法,如果添加data,那么使用post方法。

对于简单的请求,urlopen()的参数url就是一个代表url的,但是如果需要执行更复杂的操作,如修改HTTP报头,可以创建Request实例并将其作为url参数。

参数:

  • url:为url字符串
  • data:是伴随url提交的数据,提供data参数时,它会将HTTP请求从get改为post。
  • headers:是一个字典,包含了可表示HTTP报头的键值映射(即要提交的header中包含的内容)
  • origin_req_host:通常是发出请求的主机的名称,如果请求是无法验证的url(通常是指不是用户直接输入的url,比如加载图像的页面中镶入的url),则后一个参数unverifiable设为TRUE。
  • context:如果context被指定,他必须是一个ssl.SSL CONTEXT实例描述各种SSL选项,

假设Request实例r,其比较重要的方法有下面几个:

r.add_data(data):向请求添加数据。如果请求时HTTP请求,则方法改为'post'。

data是向指定url提交的数据,该方法不会将data追加到已经设置的data数据上,而是使用现在的data替换之前的。

r.add_header(key,val):向请求添加header信息,key是报头名,val是报头值,两个参数都是字符串。

r.addunredirectedheader(key,val):作用同上,但不会添加到重定向请求中。

r.set_proxy(host,tyoe):准备请求到服务器,使用host替换原来的主机,使用type替换原来的请求类型。

import urllib
import urllib2

url = 'http://www.x.com/cgi-bin/register.cgi'
values = {'name':'guo'
          'age':25           
          'address':'China'
         }
data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib.urlopen(req)
the_page = response.read()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值