`
wwty
  • 浏览: 542980 次
  • 性别: Icon_minigender_1
  • 来自: 北京-郑州
社区版块
存档分类
最新评论

httplib,urllib和urllib2的了解学习

阅读更多

httplib — HTTP protocol client:
This module defines classes which implement the client side of the HTTP and HTTPS protocols. It is
normally not used directly — the module urllib uses it to handle URLs that use HTTP and HTTPS.
这是python API当中关于httplib的介绍,意思是:
这个组件实现了HTTP和HTTPS的客户端协议,它通常不被直接使用----urilib使用它控制URLs用于HTTP和HTTPS

 

urllib和urllib2:

urllib 和urllib2实现的功能大同小异,但urllib2要比urllib功能等各方面更高一个层次。目前的HTTP访问大部分都使用urllib2来进行访问

 

urllib2:

req = urllib2.Request('http://wwty.iteye.com')     
response = urllib2.urlopen(req)     
the_page = response.read()  

 FTP同样:

req = urllib2.Request('ftp://wwty.iteye.com')

urlopen返回的应答对象response有两个很有用的方法info()和geturl()
geturl -- 这个返回获取的真实的URL,这个很有用,因为urlopen(或者opener对象使用的)或许
会有重定向。获取的URL或许跟请求URL不同。

 

Data数据
有时候你希望发送一些数据到URL
post方式:

values ={'body' : 'test short talk','via':'xxxx'} 
data = urllib.urlencode(values)
req = urllib2.Request(url, data)

get方式:

data['name'] = 'Somebody Here'  
data['location'] = 'Northampton'  
data['language'] = 'Python'  
url_values = urllib.urlencode(data)
url = 'http://www.example.com/example.cgi'  
full_url = url + '?' + url_values   
data = urllib2.open(full_url) 

 

URLError--HTTPError:

from urllib2 import Request, urlopen, URLError, HTTPError
req = Request(someurl)
try:
     response = urlopen(req)
except HTTPError, e:
     print 'Error code: ', e.code
except URLError, e:
     print 'Reason: ', e.reason
else:
      .............

 或者:

from urllib2 import Request, urlopen, URLError
req = Request(someurl)
try:
     response = urlopen(req)
except URLError, e:
     if hasattr(e, 'reason'):
           print 'Reason: ', e.reason
     elif hasattr(e, 'code'):
           print 'Error code: ', e.code
     else:
           .............

通常,URLError在没有网络连接(没有路由到特定服务器),或者服务器不存在的情况下产生
异常同样会带有"reason"属性,它是一个tuple,包含了一个错误号和一个错误信息
req = urllib2.Request('http://www.pretend_server.org')
try:
   urllib2.urlopen(req)
except URLError, e:  
   print e.reason
   print e.code
   print e.read()

最后需要注意的就是,当处理URLError和HTTPError的时候,应先处理HTTPError,后处理URLError

 

Openers和Handlers:
opener使用操作器(handlers)。所有的重活都交给这些handlers来做。每一个handler知道
怎么打开url以一种独特的url协议(http,ftp等等),或者怎么处理打开url的某些方面,如,HTTP重定向,或者HTTP
cookie。
默认opener有对普通情况的操作器 (handlers)- ProxyHandler, UnknownHandler, HTTPHandler,
HTTPDefaultErrorHandler, HTTPRedirectHandler, FTPHandler, FileHandler, HTTPErrorProcessor.
再看python API:Return an OpenerDirector instance, which chains the handlers in the order given
这就更加证明了一点,那就是opener可以看成是一个容器,这个容器当中放的是控制器,默认的,容器当中有五个控制
器,程序员也可以加入自己的控制器,然后这些控制器去干活。

class HTTPHandler(AbstractHTTPHandler):
    def http_open(self, req):
        return self.do_open(httplib.HTTPConnection, req)
    http_request = AbstractHTTPHandler.do_request_

HTTPHandler是Openers当中的默认控制器之一,看到这个代码,证实了urllib2是借助于httplib实现的,同时也证实了Openers和Handlers的关系。

分享到:
评论
1 楼 laputa 2010-03-18  
博主写的很好,学习了。
另,get方式的代码最后一行有小问题:
data = urllib2.open(full_url)  
应为urlopen

相关推荐

    Python urllib、urllib2、httplib抓取网页代码实例

    Python中的`urllib`, `urllib2`, 和`httplib`是用于网络数据请求和处理的库,它们在Web开发和爬虫项目中扮演着重要角色。这些库可以帮助开发者发送HTTP请求,获取响应,处理cookies,使用代理,以及处理重定向等问题...

    How to use httplib2 in Python 3

    需要注意的是,在Python 3中,`httplib2`区分了`bytes`和`string`类型。因此,`content`是以`bytes`形式返回的。如果需要将其转换为字符串,我们需要确定字符编码,然后显式地进行转换。例如,如果确定编码是UTF-8,...

    python网络编程学习笔记(6):Web客户端访问.docx

    ### Python网络编程学习笔记(6):Web客户端访问 #### 知识点一:网络爬虫基础...此外,还概述了`urllib`、`urllib2`、`httplib`和`mechanize`等常用库的功能和用途,为读者进一步探索Python网络编程提供了坚实的基础。

    Python httplib模块使用实例

    而对于大多数需要与HTTP进行交互的开发者来说,Python还提供了urllib和urllib2等更高级别的模块,以及httplib2等第三方库。这些模块和库提供了更为丰富的功能和更好的接口封装,使得开发更为高效。然而,学习httplib...

    python做get和post请求

    在Python中,有几个模块可以用来执行这些操作,如`urllib`, `urllib2`, `httplib`以及更新后的`http.client`模块(在Python 3中)。我们可以通过这些模块来构建GET和POST请求。 1. **urllib2模块**: - `urllib2....

    Python中的urllib模块使用详解

    2. **`urllib.parse`**:用于解析URL。 3. **`urllib.error`**:定义了几个异常类型,用于处理各种错误。 本文重点介绍`urllib.request`模块,因为它包含了用于发送请求和接收响应的主要接口。 #### 基本用法 首先...

    python调用接口的4种方式代码实例

    – urllib2 – httplib2 – pycurl – requests 1.urllib2 import urllib2, urllib github_url = 'https://api.github.com/user/repos' password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm() ...

    Python入门网络爬虫之精华版

    opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler) urllib2.install_opener(opener) # 安装opener,此后调用urlopen()时都会使用安装过的opener对象 response = urllib2.urlopen(url) 3.2 ...

    python爬虫入门教程–优雅的HTTP库requests(二)

    urllib、urllib2、urllib3、httplib、httplib2 都是和 HTTP 相关的 Python 模块,看名字就觉得很反人类,更糟糕的是这些模块在 Python2 与 Python3 中有很大的差异,如果业务代码要同时兼容 2 和 3,写起来会让人...

    M2Crypto:适用于Python的OpenSSL(2.x和3.x)(由SWIG生成)

    M2加密 维护者: ... 对Python的httplib,urllib和xmlrpclib的HTTPS扩展。 用于Web会话管理的不可伪造的HMAC'ing AuthCookies 。 FTP / TLS客户端和服务器。 S / MIME v2 。 ZServerSSL : Zope的H

    Python大数据开发讲义.pptx

    在第四页中,讲义继续讲解了如何使用Python获取网络数据,包括使用urllib、urllib2和httplib等库。特别是,在Python 3中,urllib.request取代了urllib.urlopen,httplib也被http.client取代。 在第五页中,讲义介绍...

    Python实现网络爬虫、蜘蛛.docx

    - `urllib2` 模块:`urllib2.urlopen(url_link)` 是另一种常见的获取网页内容的方式,适用于简单的请求。`urllib2.Request(url)` 可以设置额外的请求头信息。 - `requests` 库:虽然文件中未提及,但在实际开发中...

    Python网络编程.doc

    - `urllib`和`urllib2`模块提供了更高级别的网络访问接口,使得从网络上获取数据变得简单。`urllib`主要用于打开URL,可以处理基本的URL编码和解码,而`urllib2`则扩展了这个功能,支持HTTP、HTTPS、FTP等协议,...

    python software

    9. urllib2.py:在Python 2中,`urllib2`模块提供了一套更高级的URL处理函数,包括HTTP请求、处理重定向、认证和代理等。在Python 3中,它的功能被拆分到`urllib.request`和`urllib.error`模块中。 这些文件组合在...

Global site tag (gtag.js) - Google Analytics