1. 程式人生 > 其它 >app.vue裡使用data_【20200926】在Windows使用Python的URLLib3庫

app.vue裡使用data_【20200926】在Windows使用Python的URLLib3庫

技術標籤:app.vue裡使用data

介紹

介紹

福哥在使用urllib庫訪問API介面的時候,發現一個很奇葩的問題,就是網上滿天飛的教程裡都是教大家如何使用urllib的,但是通過pip安裝urllib提示找不到軟體包,這是怎麼回事?後來又看到有人使用urllib2來替換urllib庫,使用pip嘗試安裝一下,發現urllib2也是找不到軟體包,啊?怎麼辦?再後來又發現有人使用urllib3來替換urllib和urllib2,再使用pip嘗試安裝一下,發現urllib3還是找不到,崩潰了!最後看到有人說urllib和urllib2是自帶的,不需要安裝了,那麼是不是urllib3也不需要安裝呢?直接import一下,發現居然成功了!好吧,總算是用起來了~~

福哥對比urllib和urllib2以及最新版本的urllib3的語法,發現urllib3還是最完善的,怪不得要替換掉urllib和urllib2了,那麼童鞋們就跟福哥學習一下urllib3的使用方法吧。

GET

直接GET

直接請求一個網址的內容

import urllib3

# argv
url = "http://www.baidu.com"

# load url by get
http = urllib3.PoolManager()
res = http.request('GET',url)
status = res.status
source_uc = res.data.decode("utf-8")
source = source_uc.encode("gbk","ignore")

print ("狀態碼:" + str(status))
print ("原始碼:" + source)

帶引數GET

帶引數請求一個網址的內容,在百度裡搜尋“site:tongfu.net”

import urllib3
import re

# argv
url = "http://www.baidu.com/s"

# load url by get
http = urllib3.PoolManager()
res = http.request('GET',url,fields={'wd':"site:tongfu.net"})
status = res.status
source_uc = res.data.decode("utf-8")
source = source_uc.encode("gbk","ignore")

print ("狀態碼:" + str(status))

regexp = re.compile("同福主頁 - 首頁 - 同福網 - TONGFU.net", re.M)
mats = regexp.search(source)
if mats:
    print (mats.group())
else:
    print ("沒有找到")

可以看出我們通過傳遞wd引數,查詢到百度,得到了查詢結果

POST

POST普通資料

直接通過POST方式請求一個網址並提交一組資料

import urllib3
import re

# argv
url = "http://www.baidu.com/s"

# load url by get
http = urllib3.PoolManager()
res = http.request('POST',url,fields={'wd':"site:tongfu.net"})
status = res.status
source_uc = res.data.decode("utf-8")
source = source_uc.encode("gbk","ignore")

print ("狀態碼:" + str(status))

regexp = re.compile("同福主頁 - 首頁 - 同福網 - TONGFU.net", re.M)
mats = regexp.search(source)
if mats:
    print (mats.group())
else:
    print ("沒有找到")

可以看出使用POST方式傳遞wd引數,百度是不認的,查詢不到結果

POST Json資料

通過POST方式請求一個網址並以json格式提交一組資料

編碼JSON資料使用json.dumps,這個是有失敗情況的,所以需要在try下使用

import urllib3
import json

# argv
url = "http://www.baidu.com/s"

# load url by get
http = urllib3.PoolManager()
try:
    data = {'wd':"site:tongfu.net"}
    json_data = json.dumps(data)
except Exception as e:
    doNothing = e
res = http.request('POST',url,body=json_data,headers={'Content-Type':"application/json"})
status = res.status
source_uc = res.data.decode("utf-8")
source = source_uc.encode("gbk","ignore")

print status
print source

JSON

解析JSON資料

一般情況下,介面返回的資料都是json格式的,我們需要學習如何處理json資料

解析JSON資料使用json.loads,這個是有失敗情況的,所以需要在try下使用

import urllib3
import json

# argv
url = "https://tongfu.net/api/demo/user"

# load url by get
http = urllib3.PoolManager()
res = http.request('POST',url)
status = res.status
source_uc = res.data.decode("utf-8")
source = source_uc.encode("gbk","ignore")
try:
    source_json = json.loads(source_uc)
except Exception as e:
    doNothing = e

print status
print source

print source_json.get('errcode')
print source_json.get('errmsg')
print source_json.get('data').get('total')
print source_json.get('data').get('datas')[0].get('title')

認證

http認證

使用urllib3實現http認證的方法

import urllib3
import json

# argv
url = "http://www.baidu.com/s"

# load url by get
http = urllib3.PoolManager()
try:
    data = {'wd':"site:tongfu.net"}
    json_data = json.dumps(data)
except Exception as e:
    doNothing = e
headers_data = urllib3.util.make_headers(basic_auth="demo:123456")
headers_data['Content-Type'] = "application/json"
res = http.request('POST',url,body=json_data,headers=headers_data)
status = res.status
source_uc = res.data.decode("utf-8")
source = source_uc.encode("gbk","ignore")

print status
print source

總結

可以看到urllib3是個非常強大的軟體包,基本可以完成模擬絕大部分網路操作的需要。童鞋們需要掌握這一技術,因為沒有網路的軟體的功能是有限的,沒有網路的遊戲是沒有靈魂的,無論我們編寫什麼樣的程式,脫離網路基本都是小玩鬧了。

【20200926】在Windows使用Python的URLLib3庫 第 1 頁​m.tongfu.net 06c2e0665f88e953ee10ae76801d36df.png

997be3e88055f91d07b3563bb77fad82.png