Python中10个让你代码更安全的网络请求处理技巧

news2024/10/11 3:55:11

对Python感兴趣,想要有更深入了解的朋友可以试试我的这份学习方法和资料,​​​​​点这里免费获取

引言

在 Python 网络编程中,使用 requests 库进行 HTTP 请求是一种常见且高效的方式。该库不仅提供了简洁易用的 API,还支持多种高级功能。本文将介绍如何利用 requests 库来提升代码的安全性和稳定性,涵盖从基本的 GET 请求到复杂的会话管理和错误处理等多个方面。

技巧一:使用 requests 库进行 HTTP 请求

在 Python 中,requests 是最常用的库之一,用于发送 HTTP 请求。相比起标准库中的 urllibrequests 提供了更简洁易用的 API,同时也支持更多的功能。

示例代码:

import requests

# 发送 GET 请求
response = requests.get('https://api.github.com')

# 输出响应内容
print(response.text)

代码解释:

  • 导入 requests 库。

  • 使用 get() 方法发送一个 GET 请求到 GitHub 的 API 接口。

  • 打印出服务器返回的内容。

技巧二:设置超时时间

在网络请求中,设置合理的超时时间是非常重要的。这可以避免因为网络延迟或服务器无响应导致程序卡死。

示例代码:

import requests

try:
    response = requests.get('https://api.github.com', timeout=5)  # 设置超时时间为 5 秒
    print(response.text)
except requests.exceptions.Timeout:
    print("请求超时,请检查您的网络连接!")

代码解释:

  • 使用 timeout 参数设置超时时间。

  • 使用 try...except 结构捕获超时异常,并给出提示信息。

技巧三:验证 SSL 证书

当与 HTTPS 网站交互时,默认情况下 requests 会验证服务器的 SSL 证书。但有时我们需要关闭这个功能(例如测试环境),或者指定自定义的 CA 证书。

示例代码:

import requests

# 关闭 SSL 证书验证
response = requests.get('https://api.github.com', verify=False)

# 指定 CA 证书文件
response = requests.get('https://api.github.com', verify='/path/to/cert.pem')

代码解释:

  • 使用 verify=False 关闭 SSL 证书验证。

  • 使用 verify 参数指定 CA 证书路径。

技巧四:使用代理服务器

在某些情况下,我们需要通过代理服务器访问互联网。requests 支持设置代理服务器来进行网络请求。

示例代码:

import requests

proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}

response = requests.get('https://api.github.com', proxies=proxies)
print(response.text)

代码解释:

  • 定义一个包含代理服务器地址的字典。

  • 使用 proxies 参数设置代理服务器。

技巧五:设置请求头

为了更好地模拟浏览器行为,我们可以自定义请求头,包括 User-AgentAccept-Encoding 等。

示例代码:

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
    'Accept-Encoding': 'gzip, deflate',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Connection': 'keep-alive',
}

response = requests.get('https://api.github.com', headers=headers)
print(response.text)

代码解释:

  • 定义一个包含请求头信息的字典。

  • 使用 headers 参数设置请求头。

技巧六:处理重定向

在进行网络请求时,可能会遇到重定向的情况。requests 默认会自动处理重定向,但也可以手动控制。

示例代码:

import requests

# 允许自动重定向
response = requests.get('http://github.com', allow_redirects=True)

# 禁止自动重定向
response = requests.get('http://github.com', allow_redirects=False)

代码解释:

  • 使用 allow_redirects 参数控制是否允许自动重定向。

技巧七:处理 Cookie

在进行网络请求时,Cookie 是非常重要的信息,特别是在需要保持登录状态的情况下。requests 库提供了方便的方法来处理 Cookie。

示例代码:

import requests

# 创建一个 Session 对象
session = requests.Session()

# 发送一个带有 Cookie 的请求
url = 'https://example.com'
cookies = {'session_id': '12345'}
response = session.get(url, cookies=cookies)

# 输出响应内容
print(response.text)

代码解释:

  • 创建一个 Session 对象,这样可以在多个请求之间共享 Cookie。

  • 使用 cookies 参数传递 Cookie 信息。

技巧八:使用认证信息

在一些需要认证的 API 或网站上,我们需要提供用户名和密码等认证信息。requests 提供了多种方式来处理认证信息。

示例代码:

import requests

# 使用基本认证
url = 'https://api.example.com/data'
username = 'user'
password = 'password'
response = requests.get(url, auth=(username, password))
print(response.text)

# 使用 OAuth 认证
url = 'https://api.example.com/data'
token = 'your_oauth_token'
headers = {'Authorization': f'Bearer {token}'}
response = requests.get(url, headers=headers)
print(response.text)

代码解释:

  • 使用 auth 参数传递基本认证信息。

  • 使用 headers 参数传递 OAuth 认证信息。

技巧九:处理错误响应

在网络请求中,经常会遇到各种错误响应,如 404 Not Found、500 Internal Server Error 等。正确处理这些错误是保证程序稳定性的关键。

示例代码:

import requests

url = 'https://api.example.com/data'

try:
    response = requests.get(url)
    response.raise_for_status()  # 如果响应状态码不是 200,将抛出 HTTPError 异常
    print(response.text)
except requests.exceptions.HTTPError as e:
    print(f"HTTP 错误: {e}")
except Exception as e:
    print(f"其他错误: {e}")

代码解释:

  • 使用 raise_for_status() 方法检测响应状态码。

  • 使用 try...except 结构捕获异常并给出提示信息。

技巧十:使用会话管理

在处理一系列连续的网络请求时,使用会话管理可以提高效率。requests 库提供了 Session 类来管理会话。

示例代码:

import requests

# 创建一个 Session 对象
session = requests.Session()

# 设置默认的请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
    'Accept-Encoding': 'gzip, deflate',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Connection': 'keep-alive',
}
session.headers.update(headers)

# 发送多个请求
url1 = 'https://api.github.com'
url2 = 'https://api.github.com/users/octocat'

response1 = session.get(url1)
response2 = session.get(url2)

print(response1.text)
print(response2.text)

代码解释:

  • 创建一个 Session 对象。

  • 使用 update() 方法设置默认的请求头。

  • 使用 session.get() 方法发送多个请求,共享相同的请求头和会话信息。

实战案例分析:获取天气信息

假设我们要开发一个简单的天气查询系统,通过调用外部 API 获取天气信息。这里我们将使用 OpenWeatherMap 的 API。

示例代码:

import requests

# API 基础 URL 和 API Key
base_url = "https://api.openweathermap.org/data/2.5/weather"
api_key = "your_api_key"

# 查询参数
params = {
    'q': 'New York',
    'appid': api_key,
    'units': 'metric'  # 单位为摄氏度
}

# 发送 GET 请求
response = requests.get(base_url, params=params)

# 检查响应状态码
if response.status_code == 200:
    weather_data = response.json()
    city_name = weather_data['name']
    temperature = weather_data['main']['temp']
    description = weather_data['weather'][0]['description']

    print(f"城市: {city_name}")
    print(f"温度: {temperature}°C")
    print(f"描述: {description}")
else:
    print("请求失败,状态码:", response.status_code)

代码解释:

  • 设置 API 基础 URL 和 API Key。

  • 定义查询参数,包括城市名、API Key 和单位。

  • 使用 requests.get() 方法发送 GET 请求。

  • 检查响应状态码,如果是 200 则解析 JSON 数据并输出相关信息。

总结

本文介绍了使用 requests 库进行 HTTP 请求的基本方法及高级技巧,涵盖了设置超时时间、验证 SSL 证书、使用代理服务器、设置请求头、处理重定向、处理 Cookie、使用认证信息、处理错误响应、使用会话管理等方面。通过实战案例展示了如何利用这些技巧开发一个简单的天气查询系统。掌握这些技巧能够帮助开发者更高效地处理网络请求,并提升程序的健壮性和安全性。

好了,今天的分享就到这里了,我们下期见。如果本文对你有帮助,请动动你可爱的小手指点赞、收藏吧!

Python学习资料分享:

【领取方法:见文章结尾】

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

图片

图片

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,还有环境配置的教程,给大家节省了很多时间。

图片

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

图片

四、入门学习视频全套

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

图片

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

图片

图片

因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份全套Python学习资料的朋友,可以微信扫描下方CSDN官方认证二维码免费获取。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2203985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3分钟理清QPS、TPS、RT 以及它们之间的关系

在评估系统性能的时候,我们经常会听到 QPS、TPS、RT、吞吐量等等一些概念,包括在一些面试场景下可能也会遇到这些概念,我们来稍微梳理一下。 做一个简单的概念扫盲。 一 QPS QPS(Queries Per Second) 是每秒的查询率…

上市四天暴涨又暴跌,扫描全能王背后公司坐上“过山车”

股价四天涨五倍,遇到回调跌一半,扫描全能王母公司——合合信息,一上市就坐上了“过山车”。 合合信息其实早在2021年就向科创板申请上市,并在2023年成功过会,但直到9月13日才开启申购,IPO之路一走就是三年…

使用DBeaver(通用数据库管理工具)连接人大金仓数据库

下载安装DBeaver 下载地址: Download | DBeaver Community 官方甚至提供了(解压即可用的)免安装绿色版 3、下载人大金仓数据库的JDBC驱动 下载地址:电科金仓-成为世界卓越的数据库产品与服务提供商 数据库驱动管理 创建新驱动 配…

【Vue3 + TS + Vite】从0到1搭建项目框架

前言 没搭建过Vue3的项目,从0开始搭建一下,记录一下自己的步骤。 技术栈: vue3 ts scss pinia vite 我尽量写的详细一些,后续也会记录我在项目过程中,遇到的一些问题。 文章目录 前言环境搭建一、创建项目1. 使用…

JUC-线程池

阻塞队列 概述和架构 分类和核心方法 这里是在讲 为了区分在不同场景下 调用的不同组实现方法 核心方法演示 package com.example.juc.queue;import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Tim…

数据结构哈夫曼树-哈夫曼树代码构造实现(C语言)

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdlib.h> #include<stdio.h> #define N 30 //叶子结点的最大值 #define M 2*N-1 // 结点总数 typedef struct HTNode {int weight;int parent;int Lchild;int Rchild;int flag; }HTNode,HuffmanTree[M1];//Huffman…

2024年腾讯外包面试题(微创公司)

笔试&#xff1a; 1、判断异步执行顺序console.log(1);setTimeout(()>{Promise.resolve().then(()>{console.log(2);})console.log(3);},0);new Promise ((resolve)>{for(let i0; i<1000;i ){if(i1000){resolve();}}console.log(4);}).then(()>{console.log(5);…

不用PS!patchwork快速解决多子图组合问题~~

如果现在你还是将自己制作的图表放在PS或者PPT中进行随意组合的化&#xff0c;那么这篇文章你就得好好看看了&#xff0c;今天小编就给大家安利一个超强的突变自由组合包-patchwork&#xff0c;让你轻松实现多图的自由组合。 更多详细的数据可视化教程&#xff0c;可订阅我们的…

粗糙表面仿真和处理软件

首款基于粗糙表面的仿真和处理软件&#xff0c;该软件具有三种方法&#xff0c;主要是二维数字滤波法&#xff0c;相位频谱法和共轭梯度法。可以分别仿真具有高斯和非高斯分布的粗糙表面&#xff0c;其中非高斯表面利用Johnson转换系统进行变换给定偏度和峰度。对生成的粗糙表面…

怎么把视频转换成音频?深受大家喜欢的6个转换方法

怎么把视频转换成音频&#xff1f;在这个数字化迅速发展的时代&#xff0c;视频和音频已经成为我们生活中不可或缺的一部分。我们通过各种平台观看电影、听音乐、学习知识&#xff0c;视频内容承载着丰富的信息和情感。然而&#xff0c;有时候我们并不需要画面&#xff0c;而仅…

SpringBoot美发门店系统:智能库存管理

3系统分析 3.1可行性分析 通过对本美发门店管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本美发门店管理系统采用SSM框架&#xff0c;JAVA作为开发语…

JavaScript 常量/数据类型/类型转换 简单学习

目录 1. 常量 1.1 常量概述 1.2 案例 1.3 总结 2. 数据类型 2.1 概述 2.2 分类 2.2.1 基本数据类型 2.2.1 基本数据类型——number (数值/字型) 2.2.1 数字型——算术运算符 2.2.1 基本数据类型——String (字符串类型) 2.2.1 字符串拼接 2.2.1 模板字符串 2.2.1…

数据中心运维挑战:性能监控的困境与智能化解决方案的探寻

随着数字化进程的加速&#xff0c;数据中心已成为企业信息架构的核心支撑&#xff0c;其运维管理的复杂度和重要性也随之提升。运维团队需应对设备老化、资源分配失衡、性能波动等多重难题&#xff0c;以确保数据中心持续高效运行。 其中&#xff0c;性能监控作为运维管理的关键…

如何实现异地组网?最简单的方法与实用技巧

随着远程办公、跨地域团队协作以及家庭网络需求的增加&#xff0c;异地组网已成为许多人关注的焦点。异地组网的目的是让位于不同地点的设备可以通过互联网实现安全、稳定的连接&#xff0c;从而共享数据和资源。本文将详细介绍几种常见且简便的异地组网方法&#xff0c;包括使…

智慧园区平台项目建设方案

随着信息技术的飞速发展&#xff0c;智慧园区作为智慧城市的重要组成部分&#xff0c;正逐渐成为推动城市可持续发展的关键力量。本文旨在探讨智慧园区平台项目的建设内容&#xff0c;以期为相关领域的专家学者和决策者提供参考。 1. 智慧园区的定义与重要性 智慧园区是指运用…

C++设计模式——代理模式

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 引言代理模式的定义代理模式的具体实现 引言 我们经常听到代理服务器「代理服务器是一个中间服务器&#xff0c;能够接收客户端的请求&#xff0c;并代表客户端向服务器发起请求&#xff0c;然后将服…

计算、通信、感知与量子技术国际学术会议

第三届计算、通信、感知与量子技术国际会议&#xff08;CCPQT 2024&#xff09;将于2024年10月25日-10月27日在中国珠海召开&#xff0c;聚焦感知、绿色通信等领域&#xff0c;邀请国内外专家探讨前沿动态&#xff0c;旨在促进学术交流与产学研合作&#xff0c;推动学科融合发展…

YOLOv11改进策略【损失函数篇】| 利用MPDIoU,加强边界框回归的准确性

一、背景 目标检测和实例分割中的关键问题&#xff1a; 现有的大多数边界框回归损失函数在不同的预测结果下可能具有相同的值&#xff0c;这降低了边界框回归的收敛速度和准确性。 现有损失函数的不足&#xff1a; 现有的基于 ℓ n \ell_n ℓn​范数的损失函数简单但对各种尺度…

【LLM论文日更】| BGE经典论文-CPACK

论文&#xff1a;https://arxiv.org/pdf/2309.07597代码&#xff1a;GitHub - FlagOpen/FlagEmbedding: Retrieval and Retrieval-augmented LLMs机构&#xff1a;BAAI领域&#xff1a;embedding model发表&#xff1a;SIGIR 2024 ​ 研究背景 研究问题&#xff1a;这篇文章…

第十一章:规划过程组(11.18规划风险管理--11.24规划干系人参与)

前面几次考试几乎都考了风险管理的相关内容和试题~&#xff01;尤其是下午题所以感觉还是挺重要的&#xff01; 11.18 规划风险管理 11.18.1 风险基本概念 每个项目都在两个层面上存在风险:一是每个项目都有会影响项目达成目标的单个风险;二是由单个风险和不确定性的其他来源联…