天天看點

python 網絡程式設計httplib/httplib2/urllib/urllib2

httplib實作了HTTP和HTTPS的用戶端協定,一般不直接使用,在python更高層的封裝子產品中(urllib,urllib2)使用了它的http實作。

http 比URL底層,2是1的加強版。

httplib.HTTPConnection ( host [ , port [ , strict [ , timeout ]]] )

import httplib

conn = httplib.HTTPConnection("baidu.com")

conn.request('get', '/')

print conn.getresponse().read()

conn.close()

 HTTPConnection類的構造函數,表示一次與伺服器之間的互動,即請求/響應。參數host表示伺服器主機,如:http://www.csdn.net/;port為端口号,預設值為80; 參數strict的 預設值為false, 表示在無法解析伺服器傳回的狀态行時( status line) (比較典型的狀态行如: HTTP/1.0 200 OK ),是否抛BadStatusLine 異常;可選參數timeout 表示逾時時間。

HTTPConnection.request ( method , url [ , body [ , headers ]] )

調用request 方法會向伺服器發送一次請求,method 表示請求的方法,常用有方法有get 和post ;url 表示請求的資源的url ;body 表示送出到伺服器的資料,必須是字元串(如果method 是”post” ,則可以把body 了解為html 表單中的資料);headers 表示請求的http 頭。

urllib 和urllib2實作的功能大同小異,但urllib2要比urllib功能等各方面更高一個層次。目前的HTTP通路大部分都使用urllib2.

req = urllib2.Request('http://www.csdn.net')

response = urllib2.urlopen(req)

the_page = response.read()

1、urllib2.Request()的功能是構造一個請求資訊,傳回的req就是一個構造好的請求

2、urllib2.urlopen()的功能是發送剛剛構造好的請求req,并傳回一個檔案類的對象response,包括了所有的傳回資訊。

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

urllib和urllib2的主要差別:

  1. urllib2可以接受Request對象為URL設定頭資訊,修改使用者代理,設定cookie等, urllib隻能接受一個普通的URL.
  2. urllib提供一些比較原始基礎的方法而urllib2沒有這些, 比如 urlencode

四種方法代碼示例,僅供參考:     

import urllib
import urllib2
import httplib
import httplib2

print "urllib start\n"
url1 = "http://www.qq.com"
#ff = urllib.urlopen(url, data, proxies, context)
ff = urllib.urlopen(url1)
print ff.headers
print ff.info()

print "urllib2 start:\n"
url = "http://www.csdn.net" # absolute address
#urllib2.urlopen(url, data, timeout, cafile, capath, cadefault, context)
f   = urllib2.urlopen(url).info()
print f
print "another method of urllib2\n"
request = urllib2.Request(url)
respon  = urllib2.urlopen(request)
print respon.info()

print "httplib start:\n"
conn1 = httplib.HTTPConnection("baidu.com")
conn1.request('GET', '/')
res = conn1.getresponse()
header = res.getheaders()
for line in header:
    print line
conn1.close()

print "httplib2 start:\n"
url2 = "http://mail.163.com"
http = httplib2.Http()
#http.request(uri, method, body, headers, redirections, connection_type)
response, content = http.request(url2)
print response