python的httplib、urllib和urllib2的區別

綜述

首先來看一下他們的區別

urllib和urllib2

urllib 和urllib2都是接受URL請求的相關模塊,但是urllib2可以接受一個Request類的實例來設置URL請求的headers,urllib僅可以接受URL。

這意味着,你不可以僞裝你的User Agent字符串等。

urllib提供urlencode方法用來GET查詢字符串的產生,而urllib2沒有。這是爲何urllib常和urllib2一起使用的原因。

目前的大部分http請求都是通過urllib2來訪問的

 

httplib

httplib實現了HTTP和HTTPS的客戶端協議,一般不直接使用,在python更高層的封裝模塊中(urllib,urllib2)使用了它的http實現。

 

urllib簡單用法

urllib.urlopen(url[, data[, proxies]]) :


詳細使用方法見

urllib學習

urllib2簡單用法

最簡單的形式

import urllib2  
   response=urllib2.urlopen('http://www.douban.com')  
   html=response.read()

實際步驟:

1、urllib2.Request()的功能是構造一個請求信息,返回的req就是一個構造好的請求

2、urllib2.urlopen()的功能是發送剛剛構造好的請求req,並返回一個文件類的對象response,包括了所有的返回信息。

3、通過response.read()可以讀取到response裏面的html,通過response.info()可以讀到一些額外的信息。

如下:

#!/usr/bin/env python  
    import urllib2  
    req = urllib2.Request("http://www.douban.com")  
    response = urllib2.urlopen(req)  
    html = response.read()  
    print html

有時你會碰到,程序也對,但是服務器拒絕你的訪問。這是爲什麼呢?問題出在請求中的頭信息(header)。 有的服務端有潔癖,不喜歡程序來觸摸它。這個時候你需要將你的程序僞裝成瀏覽器來發出請求。請求的方式就包含在header中。
常見的情形:

import urllib  
import urllib2  
url = 'http://www.someserver.com/cgi-bin/register.cgi'  user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'# 將user_agent寫入頭信息  
values = {'name' : 'who','password':'123456'}  
headers = { 'User-Agent' : user_agent }  
data = urllib.urlencode(values)  
req = urllib2.Request(url, data, headers)  
response = urllib2.urlopen(req)  
the_page = response.read(

values是post數據

GET方法

例如百度:

百度是通過http://www.baidu.com/s?wd=XXX 來進行查詢的,這樣我們需要將{‘wd’:’xxx’}這個字典進行urlencode

#coding:utf-8  import urllib   
import urllib2    
url = 'http://www.baidu.com/s'   values = {'wd':'D_in'}     
data = urllib.urlencode(values)  
print data   
url2 = url+'?'+data  
response = urllib2.urlopen(url2)    
the_page = response.read()   
print the_page


POST方法

import urllib  
import urllib2  
url = 'http://www.someserver.com/cgi-bin/register.cgi'  
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' //將user_agent寫入頭信息  
values = {'name' : 'who','password':'123456'}      //post數據  
headers = { 'User-Agent' : user_agent }  
data = urllib.urlencode(values)                   //對post數據進行url編碼  
req = urllib2.Request(url, data, headers)  
response = urllib2.urlopen(req)  
the_page = response.read()

urllib2帶cookie的使用

#coding:utf-8  import urllib2,urllib  
import cookielib  
   
url = r'http://www.renren.com/ajaxLogin'  
   #創建一個cj的cookie的容器  
cj = cookielib.CookieJar()  
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))  
#將要POST出去的數據進行編碼  
data = urllib.urlencode({"email":email,"password":pass})  
r = opener.open(url,data)  
print cj

httplib簡單用法

#!/usr/bin/env python      
# -*- coding: utf-8 -*-      
import httplib    
import urllib    
    
def sendhttp():    
    data = urllib.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'})       
    headers = {"Content-type": "application/x-www-form-urlencoded",    
               "Accept": "text/plain"}    
    conn = httplib.HTTPConnection('bugs.python.org')    
    conn.request('POST', '/', data, headers)    
    httpres = conn.getresponse()    
    print httpres.status    
    print httpres.reason    
    print httpres.read()               
                  
if __name__ == '__main__':      
    sendhttp()

具體用法見

httplib模塊 

python 3.x中urllib庫和urilib2庫合併成了urllib庫。其中、

首先你導入模塊由

import urllib
import urllib2
變成了
import urllib.request

然後是urllib2中的方法使用變成了如下

urllib2.URLError 變成了urllib.error.URLError

而當你想使用urllib 帶數據的post請求時,

在python2中
urllib.urlencode(data)

而在python3中就變成了
urllib.parse.urlencode(data)


而在python3中就變成了




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章