HTTP请求:requests模块基础使用必知必会

这篇具有很好参考价值的文章主要介绍了HTTP请求:requests模块基础使用必知必会。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 背景

http请求是常见的一种网页协议,我们看到的各种网页,其实都是发送了http请求得到了服务器的响应,从而将数据库中复杂的数据以简单、直观的方式呈现出来,方便大众阅读、使用。而如何发送http请求呢?今天来探讨一下使用requests模块,达到高效、简单的http请求操作。

2 什么是requests

requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库,虽然标准库中的urllib2模块已经包含了平时我们使用的大多数功能,但是urllib2的API使用起来并不太友好,而requests自称“HTTP for Humans”,经过高度封装以后,可以直接调用此库的相关函数,非常方便帮助我们实现爬取HTML网页页面、模拟自动提交网络请求等操作。

HTTP请求:requests模块基础使用必知必会

requests模块一直在迭代更新,以完全适应当前的所有网络请求。

HTTP请求:requests模块基础使用必知必会

支持的 HTTP 特性:

  • 保持活动和连接池
  • 国际域名和 URL
  • Cookie 持久性会话
  • 浏览器式 SSL 验证
  • 自动内容解码
  • 基本 / 摘要身份验证
  • 优雅的键 / 值 Cookie
  • 自动减压
  • Unicode 响应机构
  • HTTP(S)代理支持
  • 分段文件上传
  • 流下载
  • 连接超时
  • 分块请求
  • .netrc 支持
  • 线程安全

3 如何安装

安装requests模块与安装其他python模块一样,使用pip命令安装即可。

pip install requests
# 如需指定版本
pip install requests==2.27.1

4 如何使用

4.1 七个主要方法

HTTP请求:requests模块基础使用必知必会

4.2 HTTP协议对资源的操作

HTTP请求:requests模块基础使用必知必会

4.3 响应公共方法

HTTP请求:requests模块基础使用必知必会

4.4 常用方式举例

4.4.1 requests.request()

method:提交方式(get|post);

url:提交地址;

kwargs:14个控制访问的参数;

HTTP请求:requests模块基础使用必知必会

常用的参数有:params、data、json、headers、cookies,其他参数讲解与示例将在(二)中进行介绍。
示例:

  • params:在url上传递的参数,GET形式传递到后台。
import requests

requests.request(
method = 'GET', 
url = 'http://127.0.0.1:8080/example/request',  
# 字典
data= { 'k1' : 'v1' , 'k2' : 'v2' , 'x':[1,2,3]} 
# 字符串
data="k1=v1&k2=v2&x=[1,2,3]"
# 字节
data = bytes("k1=v1&k2=k2&x=[1,2,3]", encoding='utf8') 
)
#  http://www.oldboyyede.com?k1=v1&k2=v2
  • data:在请求体里面传递的数据,后面可以是字典,字节等数据类型。
import requests

requests.request(
method = 'POST',
url = 'http://127.0.0.1:8080/example/request',
# 字典
data= { 'k1' : 'v1' , 'k2' : 'v2' , 'x':[1,2,3]} 
# 字符串
data="k1=v1&k2=v2&x=[1,2,3]"
# 字节
data = bytes("k1=v1&k2=k2&x=[1,2,3]", encoding='utf8')
# 文件对象
data = open('data_file.py', mode='r', encoding='utf-8')
)
  • json:在请求体里面传递数据,把整体序列化成一个大字符串,字典中嵌套字典的话用JSON序列化。
import requests

requests.request(
  method = 'POST',
  url = 'http://127.0.0.1:8080/example/request',
  json = {'k1' : 'v1', 'k2' : 'v2'}
 # "{ 'k1' : 'v1' , 'k2' : 'v2' }"

# 字典嵌套字典
json = json.dumps({'k1' : 'v1' , 'k2' : { 'kk1' : vv1 }})

)
  • headers:在请求体中添加请求头
import requests

requests.request(method='POST',
url='http://127.0.0.1:8080/example/request',
json={'k1': 'v1', 'k2': 'v2'},
headers={'Content-Type': 'application/x-www-form-urlencoded'}
)
  • cookies:在请求体中添加cookie
import requests

requests.request(method='POST',
url='http://127.0.0.1:8080/example/request',
data={'k1': 'v1', 'k2': 'v2'},
cookies={'cookie_example': 'cookie_value1'},
)
# 也可以使用CookieJar(字典形式就是在此基础上封装)
from http.cookiejar import CookieJar
from http.cookiejar import Cookie

obj = CookieJar()
# 构建cookie
obj.set_cookie(
Cookie(
version=0, 
name='c1', 
value='v1', 
port=None, 
domain='', 
path='/', 
secure=False, 
expires=None,
discard=True, 
comment=None, 
comment_url=None, 
rest={'HttpOnly': None}, 
rfc2109=False,
port_specified=False, 
domain_specified=False, 
domain_initial_dot=False, 
path_specified=False)
)
# 发送请求
requests.request(method='POST',
url='http://127.0.0.1:8080/example/request',
data={'k1': 'v1', 'k2': 'v2'},
cookies=obj
)

4.4.2 requests.get()

构造一个向服务器请求资源的request对象,然后返回一个包含服务器资源的response对象。

url:网址链接地址;

params:在url上传递的参数,以GET形式传递到后台,可为字典或字节流格式;

kwargs:14个控制访问的参数;

示例:

import requests
# 1、基本GET实例
# 设置url
url="http://127.0.0.1:8080/example/get"
# 调用get方法发送请求
response = requests.get(url)
# 打印请求状态码
print(response.status_code)
# 打印响应内容
print(response.text)
# 打印编码方式
print(response.encoding)
# 打印二进制形式内容
print(response.content)

# 2、带参数与请求头
url = "http://127.0.0.1:8080/example/get"
params = { "username": "admin" }
header = {'User-Agent': 'chrome'}
# 将请求伪装成谷歌浏览器chrome进行访问后的User-Agent,发送GET请求接口信息
response = requests.get(url=url,params=params,headers=header)
# 如接口返回数据格式为json格式
print(response.json())
# 结果为:{ "code": 200, "msg": "请求成功", "data": [{...}] }

4.4.3 requests.head()

构造一个向服务器请求资源的request对象,获取HTML网页头信息。
url:网址链接地址;

kwargs:14个控制访问的参数;

示例:

import requests
url = "http://127.0.0.1:8080/example/get"
response = requests.head(url)
# 打印请求头信息
print(response.headers)

注:部分网址请求时,可能会遇到网络防火墙,此时添加浏览器请求头信息,可避免此类问题发生。

另外,在发送一些请求时,如:网络爬虫时,如不加headers,将会被网站识别出是python程序请求,可以使用真实的浏览器信息头,模拟发生请求(警语:请遵守爬虫Robots协议)。

HTTP请求:requests模块基础使用必知必会

import requests
url = "127.0.0.1:8080/example/get"
header = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
response = requests.get(url=url, headers=header)
# 打印请求状态码
print(response.status_code)
# 200

4.4.4 requests.post()

构造一个向服务器请求资源的request对象,然后返回一个包含服务器资源的response对象。

url:网址链接地址;

kwargs:14个控制访问的参数;

示例:

# 1、基本POST实例
import requests

payload = {'key1': 'value1', 'key2': 'value2'}
ret = requests.post("http://127.0.0.1:8080/example/post", data=payload)
print(ret.text)

# 2、发送请求头和数据实例
import requests
import json

url = 'http://127.0.1:8080/example/post'
payload = {'some': 'data'}
headers = {'content-type': 'application/json'}

response = requests.post(url, data=json.dumps(payload), headers=headers)
# 打印响应内容
print(response.text)
# 打印cookie
print(response.cookies)

4.4.5 其他请求

import requests

requests.put(url, data=None, **kwargs)
requests.head(url, **kwargs)
requests.delete(url, **kwargs)
requests.patch(url, data=None, **kwargs)
requests.options(url, **kwargs)

# 以上方法均是在此方法的基础上构建
requests.request(method, url, **kwargs)

5 本期常见问题

1.打印text时,出现乱码
答:1、查看是否正确配置encoding;2、查看是否为图片,图片数据为二进制数据,将图片转化为str的字符串类型,就会出现乱码。
2.打印content时,出现“\x00\x00”等内容:
答:在python中,b开头的内容,表示为bytes类型的数据。

作者:京东物流 骆铜磊

来源:京东云开发者社区文章来源地址https://www.toymoban.com/news/detail-486080.html

到了这里,关于HTTP请求:requests模块基础使用必知必会的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 4. HBase必知必会之理论基础篇

    HBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为 Java。 它是Apache软件基金会的Hadoop项目的一部分,运行于HDFS文件系统之上,为 Hadoop 提供类似于BigTable 规模的服务,可以存储海量稀疏的数据,并具备一定的容错性、高可靠性及

    2024年02月06日
    浏览(28)
  • Git必知必会基础(10):本地冲突(conflicts)解决--rebase

    本系列汇总,请查看这里 :https://www.cnblogs.com/uncleyong/p/10854115.html 关于rebase rebase用来变基,就是重新定义(re)起点(base)的作用,即重新定义分支的版本。 在执行变基的过程中,三个常用命令: 演示场景 在合并分支过程中,可能会遇到冲突,本篇演示用rebase解决本地冲突。 基

    2024年02月22日
    浏览(34)
  • 【必知必会的MySQL知识】②使用MySQL

    目录 前言 启动MySQL服务 连接MySQL MySQL数据库基本命令 小结 根据上一篇文章【必知必会的MySQL知识】①初探MySQL的内容,想必您对MySQL数据库有了一个整体的了解了,并且应该在自己电脑上已经安装上了MySQL。 这一篇呢我们来说一说这么连接上数据库并且使用它。 前面MySQL安装

    2024年02月02日
    浏览(65)
  • 【SQL 必知必会】- 第八课 使用函数处理数据

    目录 函数         函数带来的问题         可移植(portable)         是否应该使用函数? 使用函数         文本处理函数         SOUNDEX 支持         日期和时间处理函数         数值处理函数         函数带来的问题         与几乎所有

    2023年04月10日
    浏览(39)
  • MySql必知必会

    Buffer Pool基本概念 Buffer Pool:缓冲池,简称BP。其作用是用来缓存表数据与索引数据,减少磁盘IO操作,提升效率。 Buffer Pool由 缓存数据页(Page) 和 对缓存数据页进行描述的 控制块 组成, 控制块中存储着对应缓存页的所属的 表空间、数据页的编号、以及对应缓存页在Buffer Poo

    2024年01月22日
    浏览(49)
  • 必知必会Java

    你好,我是阿光。 最近想着把工作中使用过的java命令都梳理一下,方便日后查阅。虽然这类文章很多,但自己梳理总结后,还是会有一些新的收获。这也是这篇笔记的由来。 今天先聊聊 jps 命令。 jps 命令是JDK提供的一个工具,用于查看目标系统上的Java进程基本信息(进程

    2024年02月05日
    浏览(37)
  • 聊聊Flink必知必会(七)

    虽然数据流中的许多操作一次只查看一个单独的事件(例如事件解析器),但某些操作会记住多个事件的信息(例如窗口算子)。 这些操作称为有状态的(stateful)。 有状态操作的一些示例: 当应用程序搜索某些事件模式(event patterns)时,状态(state)将存储迄今为止遇到的事件序

    2024年02月04日
    浏览(37)
  • 聊聊Flink必知必会(二)

    Flink是一个有状态的流处理框架,因此需要对状态做持久化,Flink定期保存状态数据到存储空间上,故障发生后从之前的备份中恢复,这个过程被称为Checkpoint机制。而Checkpoint为Flink提供了Exactly-Once的投递保障。 流处理是一个数据不断输入的过程,为了更好更方便的快照,需要

    2024年02月08日
    浏览(33)
  • ChatGPT入门必知必会

    更多文章欢迎关注公众号: stackoveriow 2023年是真正意义上的AI之年,因为ChatGPT 2007年,iPhone开启了智能手机时代, 2023年,我们迎来了人工智能时代,我们正处于历史的大转折点上,这也许是启蒙运动级别的思想和社会转折,工业革命级别的生产和生活转折 。继22年12月份从GP

    2023年04月18日
    浏览(61)
  • 《SQL 必知必会》全解析

    不要哀求,学会争取。若是如此,终有所获。 原文:https://mp.weixin.qq.com/s/zbOqyAtsWsocarsFIGdGgw 你是否还在烦恼 SQL 该从何学起,或者学了 SQL 想找个地方练练手?好巧不巧,最近在工作之余登上牛客,发现了牛客不知道啥时候上线了SQL 必知必会的练习题。 《SQL 必知必会》作为麻

    2024年02月08日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包