Python-requests库入门指南

2023-09-15 21:14:40

介绍

Python编写的HTTP库,能够发送HTTP和HTTPS请求,并且获取响应。在测试服务器响应方面经常使用。

下载

pip install requests

使用

常用的格式

  • requests.get(url, params=None, **kwargs)
  • requests.post(url, data=None, json=None, **kwargs)

参数介绍 

Requests库中的参数可以分为两个阶段:发起请求时的参数和获取响应后的参数。下面我们来详细看看这两个阶段的参数。

发起请求时的参数

  • method:请求方法,常用的有 GET、POST、PUT、HEAD、OPTIONS、PATCH 等。
  • url:请求地址,即你想要访问的目标 URL。
  • data:请求 BADY,可选参数,用于在请求中传递数据。它可以接受不同类型的数据,包括字符串、字典和文件。
  • params:查询参数,可选参数,用于指定请求中的查询参数。这允许你在 URL 中附加额外的参数以进行请求。
  • json:JSON 数据,可选参数,用于指定要发送的 JSON 数据。系统会自动将字典转化为 JSON 数据。
  • files:上传文件,可选参数,用于文件上传。你可以传递文件对象以上传到服务器。
  • proxies:设置代理,可选参数,允许你通过代理服务器发送请求,以访问受限制的资源。
  • headers:请求头,可选参数,用于自定义设置 HTTP 请求头信息。
  • cookies:Cookie,可选参数,用于发送 HTTP 请求时传递的 Cookie 信息。通常用于模拟已登录状态。
  • allow_redirects:是否允许重定向,默认为 True。
  • verify:是否验证 HTTPS 证书,默认为 True。
  • timeout:设置请求超时时间,以秒为单位。

以下是一个示例,展示了如何使用这些参数发起GET请求:

# 导入requests包
import requests
# 自定义请求头
headers = {"Content-Type": "application/x-www-form-urlencoded"}
# 添加cookie
cookies = {'session_id': 'abcdef12345'}
# 添加请求BADY
data = "username=admin&password=123456&verifycode=0123"
# 发送post请求
response = requests.get('https://www.baidu.com',data = data,headers = headers,cookies = cookies)

获取响应时的参数

  • status_code:响应状态码。
  • headers:响应的请求头信息。
  • request.headers:发送HTTP请求时的请求头部信息
  • encoding:响应的编码格式。
  • content:响应体,字节类型,包含原始的二进制信息。
  • text:响应体,字符串类型,会自动根据 HTTP 头部的编码信息返回内容。
  • cookies:响应对应请求的 Cookie 信息,是一个 RequestsCookieJar 对象。

注:headers 和 request.headers 是不同的请求头信息,前者是响应的请求头,后者是对于请求所响应

以下是一个示例,展示了如何使用这些参数获取响应的信息:

# 导入requests包
>>> import requests

# 发送get请求
>>> response = requests.get('https://www.baidu.com/s?wd=上海')

# 获取响应的状态码
>>> status_code = response.status_code
200

# 获取响应的响应头
>>> headers = response.headers
{'Accept-Ranges': 'bytes', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive', 'Content-Length': '227', 'Content-Security-Policy': "frame-ancestors 'self' https://chat.baidu.com http://mirror-chat.baidu.com https://fj-chat.baidu.com https://hba-chat.baidu.com https://hbe-chat.baidu.com https://njjs-chat.baidu.com https://nj-chat.baidu.com https://hna-chat.baidu.com https://hnb-chat.baidu.com http://debug.baidu-int.com;", 'Content-Type': 'text/html', 'Date': 'Tue, 19 Sep 2023 04:48:23 GMT', 'P3p': 'CP=" OTI DSP COR IVA OUR IND COM ", CP=" OTI DSP COR IVA OUR IND COM "', 'Pragma': 'no-cache', 'Server': 'BWS/1.1', 'Set-Cookie': 'BD_NOT_HTTPS=1; path=/; Max-Age=300, BIDUPSID=C6D797F5E9E2D3B9FFE04CE0338CC619; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, PSTM=1695098903; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, BAIDUID=C6D797F5E9E2D3B904C8EFA4EBC80FD9:FG=1; max-age=31536000; expires=Wed, 18-Sep-24 04:48:23 GMT; domain=.baidu.com; path=/; version=1; comment=bd', 'Traceid': '1695098903054653569015203487008619068969', 'X-Ua-Compatible': 'IE=Edge,chrome=1'}

# 获取响应对应请求的请求头
>>> header = response.request.headers
{'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

# 获取响应的编码格式
>>> encoding = response.encoding
ISO-8859-1

# 获取响应的二进制信息(响应体)
>>> content = response.content
b'<html>\r\n<head>\r\n\t<script>\r\n\t\tlocation.replace(location.href.replace("https://","http://"));\r\n\t</script>\r\n</head>\r\n<body>\r\n\t<noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript>\r\n</body>\r\n</html>'

# 获取响应的文本内容
>>> text = response.text
<html><head><script>location.replace(location.href.replace("https://","http://"));</script></head><body><noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript></body></html>

# 获取响应的cookie
>>> cookie = response.cookies
<RequestsCookieJar[<Cookie BD_NOT_HTTPS=1 for www.baidu.com/>, <Cookie BIDUPSID=7289C01F27BE4D6DC74074AF58FBE32D for .baidu.com/>, <Cookie PSTM=1695099613 for .baidu.com/>, <Cookie BAIDUID=7289C01F27BE4D6D9F92405805C4BD8D:FG=1 for .baidu.com/>]>

常用使用方式

会话管理

import requests

session = requests.Session()
session.get('https://www.baidu.com/login', params={'user': 'username', 'pass': 'password'})
response = session.get('https://www.baidu.com/dashboard')

文件上传

import requests

files = {'file': open('example.txt', 'rb')}
response = requests.post('https://example.com/upload', files=files)

代理设置

import requests

proxies = {'http': 'http://proxy.example.com', 'https': 'https://proxy.example.com'}
response = requests.get('https://example.com', proxies=proxies)
更多推荐

活动报名 | Modern Data Stack Meetup 北京首站启动!与三大开源社区共同探索现代数据栈的最佳实践

相信对于“现代数据堆栈(ModernDataStack)”这个名词,大家早已不陌生。但若问及其真正含义,往往又很难快速、准确地阐明。事实上,对于我们的团队组织而言,吃透并灵活应用“现代数据栈”所能带来的价值与收益,将会是深远且符合发展趋势的。Q1:什么是现代数据堆栈?现代数据堆栈的流行伴随着云计算和云数据仓库的崛起,本

【算法基础】数学知识

质数质数的判定866.试除法判定质数-AcWing题库时间复杂度是logN#include<bits/stdc++.h>usingnamespacestd;intn;boolisprime(intx){if(x<2)returnfalse;for(inti=2;i<=x/i;i++){if(x%i==0)returnf

华为云云耀云服务器L实例评测|部署前后端分离项目

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉🍎个人主页:Leo的博客💞当前专栏:学习测评✨特色专栏:MySQL学习🥭本文内容:华为云云耀云服务器L实例评测|部署前后端分离项目🖥️个人小站:个人博客,欢迎大家访问📚个人知识库:Leo知识库,欢迎大家访问大家好,我是

华为云云耀云服务器L实例评测|轻量级应用服务器对决:基于 STREAM 深度测评华为云云耀云服务器L实例的内存性能

本文收录在专栏:#云计算入门与实践-华为云专栏中,本系列博文还在更新中相关华为云云耀云服务器L实例评测文章列表如下:华为云云耀云服务器L实例评测|从零开始:云耀云服务器L实例的全面使用解析指南华为云云耀云服务器L实例评测|轻量级应用服务器对决:基于Geekbench深度测评华为云云耀云服务器L实例的处理器性能华为云云耀

【2023研电赛】西北赛区商业计划书赛道二等奖:“越光宝盒”-基于LoRa多跳网络的户外信息共享系统

本文为2023年第十八届中国研究生电子设计竞赛西北赛区商业计划书赛道二等奖分享,参加极术社区的【有奖活动】分享2023研电赛作品扩大影响力,更有丰富电子礼品等你来领!,分享2023研电赛作品扩大影响力,更有丰富电子礼品等你来领!“越光宝盒”-基于LoRa多跳网络的户外信息共享系统参赛单位:西安邮电大学指导老师:姚引娣参

27、Flink 的SQL之SELECT (SQL Hints 和 Joins)介绍及详细示例(2-1)

Flink系列文章1、Flink部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接13、Flink的tableapi与sql的基本概念、通用api介绍及入门示例14、Flink的tableapi与sql之数据类型:内置数据类型以及它们的属性15、Flink

【面试刷题】——Linux基础命令

Linux基础命令是在Linux操作系统中执行常见任务的一组命令。以下是一些常用的Linux基础命令,它们用于管理文件系统、执行系统任务、查看文件内容等。文件和目录操作:ls:列出目录中的文件和子目录。pwd:显示当前工作目录的路径。cd:更改当前工作目录。mkdir:创建新目录。rmdir:删除空目录。touch:创

Python办公自动化之Word

Python操作Word1、Python操作Word概述2、写入Word2.1、标题2.2、章节与段落2.3、字体与引用2.4、项目列表2.5、分页2.6、表格2.7、图片3、读取Word3.1、读取文档3.2、读取表格4、将Word表格保存到Excel5、格式转换5.1、Doc转Docx5.2、Word转PDF1、P

【word日常操作】word里面表格已经设置了重复标题行,但是显示无效怎么办

在制作表格的过程当中,相信很多人都知道,表格不只有一页的时候就会在下一面,也会显示出来,然而这时我们需要让word表头重复出现,那么该怎么办呢?1出现问题word表格如何设置多页时能重复表头,百度后出现了如下步骤:1.选中表头(标题行)2.点击鼠标右键3.点击“表格属性”4.点击“行”,在选项框中勾选“在各页顶端以标题

Linux:centos9的本地yum仓库配置

其实9和7的配置方法是差不多一样的,只不过你使用7的本地yum仓库里面直接挂载就可以直接把仓库位置指向挂载点具体可以看我往期文章,但是先看完我下面的描述再去看我链接的文章才能看懂如何配置centos9的yum仓库Linux:YUM仓库服务_鲍海超-GNUBHCkalitarro的博客-CSDN博客https://blo

北京映急物流有限公司 面试.net软件工程师岗位

请实现以下算法,语言不限,也可以是伪代码。1.有一个数组a[1000]存放了1000整数,这1000个数都大于等于1,小于等于999,并且只有两个数是相同的,剩下的998个数均不相同。请写一个最优搜索算法,找出相同的那个数的值,并给出该算法的时间复杂度。两种方法,1、先把数组从小到大排序,再用二分法查找。2、运用冒泡排

热文推荐