我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PythonHttp发送请求浅析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PythonHttp发送请求浅析

前言

相信很多人使用Python做接口请求(Http客户端请求)的时候,很多人肯定用过这几个:urllib,urllib3,requests.没错,反正我常用,而且在我这里出现最多最靓眼的那个崽是requests, 毕竟普通接口请求,爬虫常用, 而且封装起来后使用更为简单。所以在这篇文章里面,它是我浅析研究三国鼎立的其中之一。

这篇文章主要浅析这三个:

  • requests
  • aiohttp
  • httpx

浅析requests

在不借助其他第三方库的情况下,requests 只能发送同步请求。requests 是一个Python第三方库,处理URL资源特别方便,而且相对于urllib3来说封装了更多功能,并且使用步骤简单。

我们深入一下到requests api源码来看一下: 

 从图片来看,其实可以大概看出requests支持哪些功能 然后圈红的其实是最常用的一些功能,也就是可以设置请求方式,请求头,cookie,过期时间,请求接口验证,文件上传等等功能。

整理了日常大概常用的方,应该是下面这几种格式:

# get 请求
requests.get(url, params)

# post 请求
requests.post(url, data)
# 文件上传
upload_files = {'file': open('report.xls', 'rb')}
requests.post(url, file=upload_files)  
# 设置header
headers = {'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit'}
requests.post(url, headers=headers)
# 设置cookie
cookies = {'token': '12345', 'status': '摸鱼'}
requests.post(url, cookies=cookies)

如果单纯请求一个接口,获取接口数据的话,上面的完全够用了,不需要额外的操作。

但是requests有时候挺多用在爬虫场景下,爬虫有的需要保持登录信息去爬取其他接口,那么单纯的去使用requests.get 或者 requests.post,这都是一次性的请求,是不太满足需求的。 对于登录成功,再去请求其他的接口,可能需要之前生成的cookie或者token,这时候,这些信息就需要进行保存。对于这种情况,可以使用requests.session,它可以自动处理cookies,做状态保持.

大概的使用步骤应该是这样子:

# 先实例化一个对象
session = requests.session()
# 给 requests.session() 对象设置cookie信息,这个看情况使用,具体情况具体分析啊
cookies_dict = {}
session.cookies = requests.utils.cookiejar_from_dict(cookies_dict)
# 后面用法和直接使用requests一样了
# get请求
response = session.get(url)
# post请求
response = session.post(url, json=json_data)
result = response.json()
#获取登陆的所有cookies信息
print(result.cookies.values()) 

通过上面这些大概步骤,对于信息状态保持是已经足够了,这时候再用这些保持的信息去爬取接口是没有多大问题的(按道理啊,经典案例的话可以去模拟爬取一下淘宝PC端,本文具体的就不介绍了。)

浅析aiohttp

在不借助其他第三方库的情况下,aiohttp只能发送异步请求

其实,人都是贪心的,在同步请求足够完成需求后,那么人就会去从其他方面去提升, 比如同样的接口,希望能更快的处理返回,减少消耗时间,不希望阻塞。

那么随着这种需要,那么异步请求也就出现了。目前支持异步请求的方式有 async/await+asyncio+requests 组合构成,也可以使用aiohttp.aiohttp是一个为Python提供异步HTTP客户端、服务端编程,基于asyncio的异步库。aiohttp 同样是可以设置请求方式,请求头,cookie,代理,上传文件等功能的

大概用代码来表示,应该是常见这些:

# post 请求
payload = {
        "data": "hello world"
    }
async with aiohttp.ClientSession() as session:
	async with session.post(url, json=payload) as resp:
		print(resp.status)
# get请求
# 创建使用session
async with aiohttp.ClientSession() as session:
	async with session.get(url) as resp:
		print(resp.status)
		res = await resp.text()
		return res

# 上传文件
files = {'file': open('report.xls', 'rb')}
async with aiohttp.ClientSession() as sess:
	async with sess.post(url, data=files) as resp:
		print(resp.status)
		print(await resp.text())

# 设置header, cookie
headers = {'User-Agent': 'your agent'}
cookies= {'cookies_are': '摸鱼'}
async with aiohttp.ClientSession(headers=headers, cookies=cookies) as session:
	async with session.get(url) as resp:
		print(resp.status)
		res = await resp.text()
		return res

当然异步的请求,多可以是对接口返回数据在其他地方没有太强的依赖,异步的作用更多是用于提高效率,节省同步等待时间。

浅析httpx

在不借助其他第三方库的情况下,httpx既能发送同步请求,又能发送异步请求

httpx是Python新一代的网络请求库,它包含以下特点:

  • 1.基于Python3的功能齐全的http请求模块
  • 2.既能发送同步请求,也能发送异步请求
  • 3.支持HTTP/1.1和HTTP/2
  • 4.能够直接向WSGI应用程序或者ASGI应用程序发送请求

安装 httpx需要Python3.6+(使用异步请求需要Python3.8+)

httpx是Python新一代的网络请求库, 功能和requests基本都一致,但是requests在没有第三方库的支持下只能发同步请求, 但是httpx不仅可以发同步请求,还可以异步,这个是比requests要好的。因为和requests差不多,那么requests能支持设置的,那么httpx也同样可以支持

基本的使用方法:

data = {
    'name': 'autofelix',
    'age': 25
}

# get请求
httpx.get(url,params=data)
# post请求
httpx.post(url, data=data)

# 设置header,cookie,timeout
headers = {'User-Agent': 'your agent'}
cookies= {'cookies_are': '摸鱼'}
httpx.get(url, headers=headers, cookies=cookies, timeout=10.0)

# 使用client发送(同步)请求
with httpx.Client() as client:
   response = client.get(url)

异步操作, 使用async/await语句来进行异步操作,使用异步client比使用多线程发送请求更加高效,更能体现明显的性能优势

import asyncio
import httpx

async def main():
    # 异步请求AsyncClient
    async with httpx.AsyncClient() as client:
        response = await client.get(url)
        print(response)

if __name__ == '__main__':
    # python3.7+ 支持写法
    # asyncio.run(main())
    # python3.6及以下版本写法
    loop = asyncio.get_event_loop()
    result = loop.run_until_complete(asyncio.gather(main()))
    loop.close()

大体看下,同步请求使用httpx.client(), 异步请求使用httpx.AsyncClient(), 然后其他的一些基本用法都大体相似。可以说,如果你对requests熟练,那么对于aiohttp以及httpx也是很快就能上手理解的。

结语

到此这篇关于Python Http发送请求浅析的文章就介绍到这了,更多相关Python Http请求内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PythonHttp发送请求浅析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python HTTP请求详解:发送、接收和解析网络请求

本文详细讲解了 Python HTTP 请求的基本流程,包括发送请求、接收响应和解析响应,并提供了演示代码,帮助您快速掌握 HTTP 请求的实现方法。
Python HTTP请求详解:发送、接收和解析网络请求
2024-02-23

用python发送put请求

做了一个服务,上传数据时接受put请求,查了一下,客户端代码用Python来写的话非常简单,跟Post基本一致。这里是一个用PUT上传文件数据的例子:import urllib2opener = urllib2.build_opener(u
2023-01-31

react怎么发送axios请求

react发送axios请求的方法:1、通过“npm install axios --save”命令安装axios;2、在react文件中使用typescript方式导入axios依赖;3、使用“axios.get”或者“axios(config { ... })”的方式进行GET请求即可。
2023-05-14

python scrapy.Request怎么发送请求

这篇文章主要讲解了“python scrapy.Request怎么发送请求”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python scrapy.Request怎么发送请求”吧!说明1、使
2023-06-20

java怎么发送post请求

在Java中发送POST请求,可以使用java.net包中的HttpURLConnection类。以下是一个简单的示例代码:```javaimport java.io.BufferedReader;import java.io.DataOu
2023-08-20

vue怎么发送ajax请求

这篇文章主要讲解了“vue怎么发送ajax请求”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue怎么发送ajax请求”吧!首页安装并引入axios1、npm install axios -
2023-07-04

nodejs发送多个http请求

随着互联网的发展和技术的进步,以及互联网应用的不断涌现,人们对于网络通信的需求越来越多。而在这些网络通信中,http协议是最为常见的一种方式。在nodejs中,我们可以很方便地发送http请求来实现网络通信。本文将介绍如何使用nodejs发送多个http请求。1. http模块在nodejs中,http模块是用来处理http协议的模块,它提供了一些实用的API来创建HTTP服务
2023-05-18

java怎么发送tcp请求

Java可以使用Socket类来发送TCP请求。下面是一个简单的示例代码:```javaimport java.io.BufferedReader;import java.io.IOException;import java.io.Inpu
2023-09-26

HttpClient怎么发送Get请求

HttpClient可以以多种方式发送GET请求,以下是其中的一种示例代码:```javaimport org.apache.http.HttpEntity;import org.apache.http.HttpResponse;impor
2023-08-24

react如何发送axios请求

这篇文章主要介绍了react如何发送axios请求的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇react如何发送axios请求文章都会有所收获,下面我们一起来看看吧。react发送axios请求的方法:1、通
2023-07-04

javascript发送ajax请求参数

JavaScript 是互联网上普遍使用的编程语言之一,可以用来为网站添加动态交互性。而 AJAX 是一种在不刷新整个页面的情况下,与服务器进行异步数据交换的技术。在很多网站上,我们都能够看到通过 AJAX 获取数据的例子。如何使用 JavaScript 发送 AJAX 请求并接收返回值?本文将为你介绍。发送 AJAX 请求的主要步骤包括:1. 创建 XMLHttpReques
2023-05-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录