美文网首页
urllib2 HTTP 客户端库

urllib2 HTTP 客户端库

作者: Dream_lover | 来源:发表于2016-12-20 20:48 被阅读0次

    urllib2是Python的一个获取URLs(Uniform Resource Locators)的组件。可以利用不同协议获取URLs。urllib的request模块可以抓取URL内容,也就是发送一个GET请求到指定的页面,也就是对http请求的加工,然后返回HTTP的响应:
    实例:

    import urllib2 
    with urllib2.urlopen('http://python.org/') as f: 
      data = f.read()
      data.decode('utf-8')
    #除了"http:",URL同样可以使用"ftp:","file:"等等来替代
    
    encode:编码
    decode:解码
    

    HTTP是基于请求和应答机制的--客户端提出请求,服务端提供应答。rllib2用一个Request对象来映射你提出的HTTP请求,在它最简单的使用形式中你将用你要请求的地址创建一个Request对象,通过调用urlopen并传入Request对象,通过往Request对象添加HTTP头,把请求伪装成浏览器,将返回一个相关请求response对象,这个应答对象如同一个文件对象,所以你可以在Response中调用.read()。

    import urllib2 
    req = urllib2.Request('http://www.pythontab.com') 
    req.add_header('User-Agent', 'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25')
    with urllib2.urlopen(req) as f:
        f.read().decode('utf-8')
    

    post

    在HTTP请求时,发送data表单数据,也能够传送额外的关于数据或发送本身的信息("metadata")到服务器,此数据作为HTTP的"headers"来发送。

    import urllib 
    import urllib2 
    url = 'http://www.pythontab.com' 
    values = {'name' : 'Michael Foord', 
              'location' : 'pythontab', 
              'language' : 'Python' } 
    data = urllib.urlencode(values) 
    req = urllib2.Request(url, data) 
    with urllib2.urlopen(req) as f: 
          f.read().decode('utf-8')
    

    urllib2 只支持 HTTP 的 GET 和 POST 方法,如果要使用 HTTP PUT 和 DELETE,只能使用比较低层的 httplib 库。

    proxy

    import urllib2
    proxy = urllib2.ProxyHandler({'http': '127.0.0.1:8087'})
    opener=urllib2.build_opener(proxy)#使用 urllib2.install_opener() 会设置 urllib2 的全局 opener。这样后面的使用会很方便,但不能做更细粒度的控制,比如想在程序中使用两个不同的 Proxy 设置等.比较好的做法是不使用 install_opener 去更改全局的设置,而只是直接调用 opener 的 open 方法代替全局的 urlopen 方法。
    urllib2.install_opener(opener)
    with urllib2.urlopen('http://feeds2.feedburner.com/MobileOrchard') as f:
          f.read().dencode('utf-8')
    

    HTTP

    一个Http请求的数据大致包括URI、Header、和Body三个部分。这三个部分貌似都需要encoding
    

    HTTP Request 中特定的 Header

    User-Agent 有些 Server 或 Proxy 会检查该值,用来判断是否是浏览器发起的 Request
    Content-Type 在使用 REST 接口时,Server 会检查该值,用来确定 HTTP Body 中的内容该怎样解析。

    常见的取值有:

    • application/xml :在 XML RPC,如 RESTful/SOAP 调用时使用
    • application/json :在 JSON RPC 调用时使用
    • application/x-www-form-urlencoded :浏览器提交 Web 表单时使用
    • 常用对照表 [http://tool.oschina.net/commons]
      在使用 RPC 调用 Server 提供的 RESTful 或 SOAP 服务时, Content-Type 设置错误会导致 Server 拒绝服务。
      http的访问方法:
      GET通过请求URI得到资源
      POST,用于添加新的内容
      PUT用于修改某个内容
      DELETE,删除某个内容
      CONNECT,用于代理进行传输,如使用SSL
      OPTIONS询问可以执行哪些方法
      PATCH,部分文档更改
      PROPFIND, (wedav)查看属性
      PROPPATCH, (wedav)设置属性
      MKCOL, (wedav)创建集合(文件夹)
      COPY, (wedav)拷贝
      MOVE, (wedav)移动
      LOCK, (wedav)加锁
      UNLOCK (wedav)解锁
      TRACE用于远程诊断服务器
      HEAD类似于GET, 但是不返回body信息,用于检查对象是否存在,以及得到对象的元数据
      一般使用post,get方法
    a5f3989e83142607096427ef7d9303de.gif

    Handle Exceptions处理异常

    当urlopen不能够处理一个response时,产生urlError

    相关文章

      网友评论

          本文标题:urllib2 HTTP 客户端库

          本文链接:https://www.haomeiwen.com/subject/lcdfvttx.html