首先,我們來看看他們的區別。
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分鐘
}