Python urllib封装网络请求方法

本文介绍了Python3中urllib库如何封装网络请求的基本方法,包括GET、POST和PUT。get方法用于创建GET请求,post方法处理POST请求,包括请求体的编码,put方法则用于PUT请求。此外,还提供了一个post请求体的编码辅助函数。
摘要由CSDN通过智能技术生成

(一)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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rongmelt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值