當前位置:成語大全網 - 書法字典 - python中httplib、urllib和urllib2的區別和用法

python中httplib、urllib和urllib2的區別和用法

棕樹

首先,我們來看看他們的區別。

Urllib和urllib2

urllib和urllib2都是接受URL請求的相關模塊,但是urllib2可以接受request類的壹個實例來設置URL請求的頭,而urllib只能接受URL。

這意味著妳不能偽裝妳的用戶代理字符串等。

Urllib提供了urlencode方法來獲取查詢字符串的生成,而urllib2沒有。這就是urllib經常和urllib2壹起使用的原因。

當前的大多數表;MSIE 5.5Windows NT)'#將user_agent寫入標頭信息。

values = {'name' : 'who ',' password':'123456'}

headers = { '用戶代理' :用戶代理}

data = urllib.urlencode(值)

req = urllib2。請求(url、數據、標題)

response = urllib2.urlopen(req)

_page = response.read()

值是後期數據。

獲取方法

比如百度:

這樣,我們需要對字典{'wd':' XXX'}進行urlencode。

#編碼:utf-8

導入urllib

導入urllib2

url = ' '

values = {'wd':'D_in'}

data = urllib.urlencode(值)

打印數據

url2 = url+'?'+數據

response = urllib2.urlopen(url2)

_page = response.read()

打印第_頁

過帳方法

導入urllib

導入urllib2

url = ' '

user_agent = 'Mozilla/4.0(兼容;MSIE 5.5Windows NT)' //將user_agent寫入頭信息。

Values = {'name':' who ',' password':' 123456'}/post數據

headers = { '用戶代理' :用戶代理}

Data = urllib。urlencode(values)//對發布數據進行url編碼。

req = urllib2。請求(url、數據、標題)

response = urllib2.urlopen(req)

_page = response.read()

urllib2與cookie的結合使用

#編碼:utf-8

導入urllib2,urllib

導入cookielib

url = r ' '

#為cj的cookie創建壹個容器

cj = cookielib。CookieJar()

opener = URL lib 2 . build _ opener(URL lib 2。HTTPCookieProcessor(cj))

#對要發布的數據進行編碼。

data = urllib . urlencode({ " email ":email," password":pass})

r = opener.open(url,data)

打印cj

httplib的簡單用法

簡單的例子

#!/usr/bin/env python

# -*-編碼:utf-8 -*-

導入httplib

導入urllib

def發送http():

data = urllib . urlencode({ ' @ number ':12524,' @type': 'issue ',' @action': 'show'})

headers = { " Content-type ":" application/x-www-form-urlencoded ",

" Accept": "text/plain"}

conn = httplib。http connection(' bugs . python . org ')

conn.request('POST ','/',數據,標題)

httpres = conn.getresponse()

打印httpres.status

打印httpres.reason

打印httpres.read()

if __name__ == '__main__ ':

發送http()

具體用法參見。

Httplib模塊

python 3.x中的urllib庫和urilib2庫合並為urllib庫。其中,

首先,通過以下方式導入模塊

導入urllib

導入urllib2

成為

導入urllib.request

urllib2中的方法用法如下。

Urllib2.urlopen()變成了urllib.request.urlopen()。

Urllib2。Request()變成了urllib.request.Request()。

Urllib2。URLError成為urllib.error.URLError

當您想對數據使用urllib post請求時,

在python2中。

urllib.urlencode(數據)

在python3中,它變成了

urllib.parse.urlencode(數據)

腳本使用示例:

在python 2中

導入urllib

導入urllib2

導入json

從配置導入設置

def url_request(self,action,url,* * extra _ data):ABS _ URL = " http://% s:% s/% s " %(settings . configs[' Server '],

settings.configs["ServerPort"],

網址)

if action in ('get ',' get '):

打印(abs_url,extra_data)

嘗試:

req = urllib2。請求(abs_url)

req_data = urllib2.urlopen(req,time out = settings . configs[' request time out '])

回調= req_data.read()

# print "->;服務器響應:“,回調

返回回撥

除了urllib2。URLError為e:

退出(" \ 033[31;1m%s\033[0m" % e "

elif操作在(' post ',' POST '):

# print(abs_url,extra_data['params'])

嘗試:

data _ encode = urllib . urlencode(extra _ data[' params '])

req = urllib2。請求(url=abs_url,data=data_encode)

res_data = urllib2.urlopen(req,time out = settings . configs[' request time out '])

callback = res_data.read()

callback = json.loads(回調)

打印(" \ 033[31;1m[%s]:[%s]\033[0m響應:\n%s" %(操作,abs_url,回調))

返回回撥

例外情況為e:

打印('- exec ',e)

退出(" \ 033[31;1m%s\033[0m" % e "

在python3.x中

導入urllib.request

導入json

從配置導入設置

定義url_request(自身,操作,url,* *額外數據):

ABS _ url = ' http://% s:% s/% s/' %(settings . configs[' server IP '],settings.configs['ServerPort'],URL)

If操作in ('get ',' Get'): # get請求

print(action,extra_data)嘗試:

req = URL lib . request . request(ABS _ URL)

req _ data = urllib . request . urlopen(req,time out = settings . configs[' request time out '])

回調= req_data.read()

返回回撥

除了urllib.error.URLError作為e:

退出(" \ 033[31;1m%s\033[0m" % e "

Elif操作in ('post ',' post'): #向服務器發送數據。

嘗試:

data _ encode = urllib . parse . urlencode(extra _ data[' params '])

req = URL lib . request . request(URL = ABS _ URL,data=data_encode)

req _ data = urllib . request . urlopen(req,time out = settings . configs[' request time out '])

回調= req_data.read()

回調= json.loads(callback.decode())

返回回撥

除了urllib.request.URLError作為e:

打印('- exec ',e)

退出(" \ 033[31;1m%s\033[0m" % e "

設置配置如下:

配置= {

' HostID': 2,

"服務器":"本地主機",

【服務器端口】:8000,

" URL ":{

get _ configs ':[' API/client/config ',' get'],#acquire所有將被監視的服務

service _ report ':[' API/client/service/report/',' post'],

},

' RequestTimeout': 30,

' ConfigUpdateInterval': 300,默認為# 5分鐘

}