请求模块requests:复杂的网络请求

简介: 请求模块requests(四)

复杂的网络请求
4、验证请求
requests模块自带了验证功能,只需要在请求方法中填写auth参数,该参数的值是一个带有验证参数(用户名与密码)的HTTPBasicAuth对象。示例代码如下:

import requests          # 导入requests模块
from requests.auth import HTTPBasicAuth  # 导入HTTPBasicAuth类
# 定义请求地址
url = 'http://sck.rjkflm.com:666/spider/auth/'
ah = HTTPBasicAuth('admin','admin')      # 创建HTTPBasicAuth对象,参数为用户名与密码
response = requests.get(url=url,auth=ah) # 发送网络请求
if response.status_code==200:            # 如果请求成功
    print(response.text)                 # 打印验证后的HTML代码

程序运行结果如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>标题文档</title>
</head>

<body>
<img src='../images/logo1.png'>
<br>
hello 明日科技 ~
</body>
</html>

image.png

5、网络超时与异常
在访问一个网页时,如果该网页长时间未响应,系统就会判断该网页超时,无法打开网页。下面通过代码来模拟网络超时现象,代码如下:

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :1/28/22 10:38 PM
# 文件      :演示网络超时与异常现象.py
# IDE      :PyCharm

# 导入网络请求模块
import requests

# 循环发送请求50for a in range(0, 50):
    try:
        # 设置超时0.1秒
        resp = requests.get('https://www.baidu.com/', timeout = 0.08)
        print(resp.status_code)
        print(a+1)
        # 捕获异常
    except Exception as e:
        print('异常' + str(e))

运行结果如下:

200
8
200
9
200
10
异常HTTPSConnectionPool(host='www.baidu.com', port=443): Read timed out. (read timeout=0.08)
200
12
200

说 明:

上面代码模拟50次循环请求,并且设置超时的时间为0.08秒,所以在0.08秒内服务器未做出响应将视为超时,将超时信息打印在控制台中。

6、识别网络异常的分类
针对网络异常的信息,requests模块同样提供了三种常见的网络异常类捕获异常,代码如下:

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :1/28/22 10:50 PM
# 文件      :识别网络异常的分类.py
# IDE      :PyCharm

import requests  # 导入网络请求模块
# 导入requests.exceptions模块中的三种异常类
from requests.exceptions import ReadTimeout,HTTPError,RequestException
# 循环发送请求50for a in range(0, 50):
    try:    # 捕获异常
        # 设置超时为0.1秒
        response = requests.get('https://www.baidu.com/', timeout=0.06)
        print(response.status_code)                                        # 打印状态码
    except ReadTimeout:                                                     # 超时异常
        print('timeout')
    except HTTPError:                                                       # HTTP异常
        print('httperror')
    except RequestException:                                               # 请求异常
        print('reqerror')

程序运行结果如下:

timeout
reqerror
timeout
reqerror
timeout
reqerror
200
timeout
timeout
timeout
200
200

7、上传文件
使用requests模块实现向服务器上传文件也是非常简单的,只需要指定post()函数中的files参数即可。files参数可以指定一个BufferReader对象,该对象可以使用内置的open()函数返回。示例代码如下:

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :1/28/22 11:10 PM
# 文件      :使用requests模块实现上传图片文件.py
# IDE      :PyCharm

import requests

# 读取指定文件
bd = open('百度logo.png', 'rb')

# 定义需要上传的图片文件
file = {
   'file':bd}

# 发送上传文件的网络请求
resp = requests.post('http://httpbin.org/post', files = file)
print(resp.text)

程序运行结果如下:

{
   
  "args": {
   }, 
  "data": "", 
  "files": {
   
    # 图片文件的二进制数据,很长,....为省略部分
    "file": "data:application/octet-stream;base64,iVBORw0KGgoAAAANSUhEUgAAAhwAAAECCAMAAACCFP44AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKTWlDQ1BQaG90b3Nob3A.....},   
  "form": {
   }, 
  "headers": {
   
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "8027", 
    "Content-Type": "multipart/form-data; boundary=ce27e478ee87d2f129d4c606fa26aad6", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.27.1", 
    "X-Amzn-Trace-Id": "Root=1-61f40844-62fc499e71a1206c071b9658"
  }, 
  "json": null, 
  "origin": "222.163.139.128", 
  "url": "http://httpbin.org/post"
}

说 明:

从上面的程序运行结果可以看出,提交的图片文件(二进制数据)被指定在files中,file对应的数据中可以发现post()函数将上传的文件转为Base64的编码形式。

相关文章
|
10月前
|
机器学习/深度学习 计算机视觉
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
349 3
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
|
4月前
|
XML JSON JavaScript
从解决跨域CSOR衍生知识 Network 网络请求深度解析:从快递系统到请求王国-优雅草卓伊凡
从解决跨域CSOR衍生知识 Network 网络请求深度解析:从快递系统到请求王国-优雅草卓伊凡
127 0
从解决跨域CSOR衍生知识 Network 网络请求深度解析:从快递系统到请求王国-优雅草卓伊凡
|
10月前
|
机器学习/深度学习 计算机视觉 网络架构
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块
798 63
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块
|
10月前
|
机器学习/深度学习 计算机视觉
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
527 62
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
|
9月前
|
存储 人工智能 编解码
Deepseek 3FS解读与源码分析(2):网络通信模块分析
2025年2月28日,DeepSeek 正式开源其颠覆性文件系统Fire-Flyer 3FS(以下简称3FS),重新定义了分布式存储的性能边界。本文基于DeepSeek发表的技术报告与开源代码,深度解析 3FS 网络通信模块的核心设计及其对AI基础设施的革新意义。
Deepseek 3FS解读与源码分析(2):网络通信模块分析
|
10月前
|
机器学习/深度学习 计算机视觉
RT-DETR改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 优化颈部网络
RT-DETR改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 优化颈部网络
474 10
RT-DETR改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 优化颈部网络
|
10月前
|
机器学习/深度学习 计算机视觉
YOLOv11改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
YOLOv11改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
377 9
YOLOv11改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
|
10月前
|
机器学习/深度学习 计算机视觉
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
415 9
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
|
10月前
|
机器学习/深度学习 计算机视觉
YOLOv11改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 二次创新C3k2 改进颈部网络
YOLOv11改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 二次创新C3k2 改进颈部网络
700 6
YOLOv11改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 二次创新C3k2 改进颈部网络
|
10月前
|
机器学习/深度学习 计算机视觉 网络架构
YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块
YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块
912 19

热门文章

最新文章