首先,我們來看看它們的區別。
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 = URL lib 2 . urlopen(req)
the_page = response.read()
值是後期數據。
獲取方法
例如百度:
這樣,我們需要對字典{‘wd‘:‘XXX‘}進行urlencode。
#編碼:utf-8
導入urllib
導入urllib2
URL =‘‘
values = {‘wd‘:‘D _ in‘}
data = urllib.urlencode(值)
打印數據
URL 2 = URL+‘?‘。+數據
response = URL lib 2 . urlopen(URL 2)
the_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 = URL lib 2 . urlopen(req)
the_page = response.read()
urllib2與cookie的結合使用
#編碼:utf-8
導入urllib2,urllib
導入cookielib
url = r“”
#為cj的cookie創建壹個容器
cj = cookielib。庫克耶爾()
opener = URL lib 2 . build _ opener(URL lib 2。HTTPCookieProcessor(CJ))
#對要發布的數據進行編碼。
data = urllib . urlencode({“email“:電子郵件,“password“:pass })
r = opener . open(URL,data)
打印cj
httplib的簡單用法
簡單的例子
#!/usr/bin/env python
# -*-編碼:utf-8 -*-
導入httplib
導入urllib
def sendhttp():
data = urllib . urlencode({“@ number“:12524,“@ type“:“issue“,“@ action“:“show“})
headers = {“Content-type“:“application/x-www-form-urlencoded“,
“接受“:“文本/普通“}
conn = httplib。http connection(‘bugs . python . org‘)
conn . request(‘POST‘,‘/‘,data,headers)
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【“server port“】,
網址)
if操作in(‘GET‘,‘GET‘):
打印(abs_url,extra_data)
嘗試:
req = urllib2。請求(abs_url)
req _ data = URL lib 2 . URL open(req,time out = settings . configs【‘request time out‘】)
回調= req_data.read()
#打印“-& gt;服務器響應:“,回調
返回回撥
urllib2除外。URLError as 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 = URL lib 2 . URL open(req,time out = settings . configs【‘request time out‘】)
回調= res_data.read()
callback = json.loads(回調)
print(“\ 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【‘server port‘】,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(回調。解碼())
返回回撥
除了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“】,
},
“request time out”:30,
“ConfigUpdateInterval”:300,默認為# 5分鐘
}