(一)Python的网络请求库汇总
Python有很多功能强大的网络请求库,汇总如下表所示:
网络请求库名称 | 介绍 |
---|---|
urllib(Python2) | Python2的内置库 |
urllib2(Python2) | Python2的内置库 |
urllib(Python3) | Python3的内置库,该内置库是对Python2中urllib和urllib2整合后的库 |
urllib3 | 虽然库名中包含urllib,但是却是一个第三方的网络请求库 |
requests | 第三方的网络请求库 |
(二)使用urllib封装网络请求方法
一般情况下可使用功能强大的第三方网络请求库,但有时也会仅允许是用Python3标准环境进行网络请求,在Python3标准环境下就必须使用内置库对基本方法进行封装使用。
1. get方法
import urllib
from urllib.request import Request
def request_get(domain: str, path: str, header: dict, paras: dict) -> Request:
# request url
if len(query_paras) != 0:
encode_query_paras = urllib.parse.urlencode(paras)
url = "?".join([domain + path, paras])
else:
url = domain + path
return urllib.request.Request(url, headers=header, method='GET')
2. post方法
import urllib
from urllib.request import Request
request_post(domain: str, path: str, header: dict, body: dict, paras: dict = None) -> Request:
# request url
url = domain + path
# request body
if len(body) != 0:
body = post_body_encode(header['Content-Type'], body)
else:
body = None
# request query
if (paras is not None) and (len(paras) != 0):
encode_paras = urllib.parse.urlencode(paras)
url = "?".join([url, encode_paras])
return urllib.request.Request(url, headers=header, data=body, method='POST')
3. put方法
import urllib
from urllib.request import Request
def request_put(request_url: str, header: dict, data: bytes) -> Request:
return urllib.request.Request(request_url, headers=header, data=data, method='PUT')
4. post请求体编码方法
improt urllib
import json
def post_body_encode(content_type: str, body: dict)
if content_type == "application/x-www-form-urlencoded":
return bytes(urllib.parse.urlencode(request_body).encode('utf-8'))
elif content_type == "application/json" or content_type == "application/json;charset=UTF-8":
return bytes(json.dumps(body), 'utf-8')
else:
return None