Python - requests库

requests.请求方法(url, params=None, data=None, json=None, headers=None)

• 常见的请求方法: get/post/put/delete
• url: 请求的url地址
• params: 请求查询参数
• data: 表单参数
• json: json参数
• headers: 请求头参数

Get基本使用

# 1. 导包
import requests

# 2.调用get方法
url = "http://www.baidu.com"
response = requests.get(url)
# 3.根据返回的对象查看url
print("url :", response.url)

# 4.查看响应码
print("响应码:", response.status_code)
# 5.查看返回文本
print("返回文本:", response.text)

Get 请求传递参数

"""
def get(url, params=None, **kwargs):

目标:
    1.访问百度传参:http://www.baidu.com?id=1001
    2.访问百度传参:http://www.baidu.com?id=1001,1002
    3.访问百度传参:http://www.baidu.com?id=1001&wd=sz
"""

# 1. 导包
import requests

# 2.调用get方法
url = "http://www.baidu.com"

# 2.1 定义参数

# 方式一 url 问号传参:http://www.baidu.com?id=1001
# url = http://www.baidu.com?id=1001
# response = requests.get(url)

# 方式二: url 问号传参:http://www.baidu.com?id=1001,1002
# url = http://www.baidu.com?id=1001,1002
# response = requests.get(url)

# 方式三: 关键字传参:
params = {"id": "1001", "wd": "sz"}
response = requests.get(url, params=params)

# 3.根据返回的对象查看url
print("url :", response.url)

# 4.查看响应码
print("响应码:", response.status_code)
# 5.查看返回文本
print("返回文本:", response.text)

POST请求-自动编码JSON

"""
目标: 演示post请求,自动编码JSON参数
     def post(url, data=None, json=None, **kwargs):
"""

import requests

# 2. 请求参数准备
# 2.1 url
url = "http://echo.apipost.cn/get.php"

# 2.2 请求数据
data = {"userid": 1}

#调用post请求
#json: 自动将请求数据编码为json格式
r = requests.post(url, json=json_data)

print(r.status_code)
print(r.text)

输出如下:

200
{
  "args": {}, 
  "data": "{\"userid\": 1}", 
  "files": {}, 
  "form": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "13", 
    "Content-Type": "application/json", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.26.0", 
    "X-Amzn-Trace-Id": "Root=1-61cec82f-1c3b5da01e3103d84be8b8b1"
  }, 
  "json": {
    "userid": 1
  }, 
  "origin": "113.110.203.110", 
  "url": "http://httpbin.org/post"
}

POST请求-手动编码JSON参数

"""
目标: 演示post请求,手动编码JSON参数

     def post(url, data=None, json=None, **kwargs):
     data: 可选,要发送到请求体中的字典、元组、字节或文件对象
     json:可选,要发送到请求中的json数据
"""

import requests
import json

# 2. 请求参数准备
# 2.1 url
url = "http://httpbin.org/post"
# 2.2 指定header中的请求方式为json
header = {"headers": "Application/json"}
# 2.3 请求数据
data = {"userid": 1}

# 3 调用请求
r = requests.post(url, data=json.dumps(data), headers=header)

print(r.status_code)
print(r.text)

输出:

200
{
  "args": {}, 
  "data": "{\"userid\": 1}", 
  "files": {}, 
  "form": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "13", 
    "Headers": "Application/json", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.26.0", 
    "X-Amzn-Trace-Id": "Root=1-61cecb1c-1c710abe2c335b944c4774ed"
  }, 
  "json": {
    "userid": 1
  }, 
  "origin": "113.110.203.110", 
  "url": "http://httpbin.org/post"
}

POST form 表单形式传参

"""
POST 函数声明: def post(url, data=None, json=None, **kwargs):

目标:
发送POST请求-表单提交:
    响应对象 = requests.post(url, data=表单数据的字典格式)
    注意:字典类型的数据,在内部自动转换为表单格式
"""

import requests
import json

# 2. 请求参数准备
# 2.1 url
url = "http://httpbin.org/post"

# 2.2 请求数据
data = {"userid": 1}

# 3 调用请求
r = requests.post(url, data=data)

print(r.status_code)
print(r.text)



输出:

200
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "userid": "1"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "8", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.26.0", 
    "X-Amzn-Trace-Id": "Root=1-61cecc3a-469d97f05f2bab754882fafd"
  }, 
  "json": null, 
  "origin": "113.110.203.110", 
  "url": "http://httpbin.org/post"
}

POST 请求.json() 和.text的区别

response.json():返回的是dict对象,可以通过key 获得value
response.text: 返回的是字符串对象,不能通过key获得value

response 对象

encoding 和 headers 属性

import requests

url = "http://www.baidu.com"

r = requests.get(url)

"""
encodeing:
1. 如果返回头没有指定编码方式,采用默认的ISO-8859-1
2. 此时如果调用text中文乱码,则可以用response.encoding 手动指定编码方式
"""
print(r.encoding)

"""
cookie/session 都保存在响应的header信息中
"""
print(r.headers)

关于编码方式,可先参考:
https://www.cnblogs.com/bw13/p/6549248.html

cookies 属性

import requests

url = "http://www.baidu.com"

r = requests.get(url)

# 获得服务器响应的cookie头信息, dict_cookies是一个字典对象
dict_cookies = r.cookies
print(dict_cookies)  # 输出:<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
print(dict_cookies.get("BDORZ"))  # 输出:27315

content 属性

import requests

url = "https://www.baidu.com/img/bd_logo1.png?where=super"
r = requests.get(url)

# 获得响应体的二进制信息
print(type(r.content))  # out: <class 'bytes'>

# 将响应的baidu logo 写入./img/ 目录下
with open("./img/baidu_logo.png", "wb") as f:  
    f.write(r.content)

session 对象

import requests

# 在每次请求中添加cookies信息比较繁琐,用session可以自动保存并上送
# 在一次session会话中,可以自动保存服务器产生的cookies 信息,并且自动在下一条请求时附加

session = requests.session()

url = 'http://httpbin.org/cookies/set/sessioncookie/123456789'
# 服务器产生cookies
session.get(url)

# 请求服务器,session会自动携带cookies信息到服务器
r = session.get("http://httpbin.org/cookies")
print(r.json()) # out: {'cookies': {'sessioncookie': '123456789'}}

timeout 异常处理

# ** 处理方法一:
# try:
#     # timeout=0.1: 连接和读值的时间总和
#     # 还有一种写法: timeout=(1,1),连接超时设置为1s,读值超时时间设置为1s
#     resp = requests.get('https://www.douban.com', timeout=0.1)
# except ConnectTimeout as e:  # 超过设置的连接超时时间后会报ConnectTimeout
#     print('连接超时')
# except ReadTimeout as e:  # 超过设置的连接超时时间后会报ReadTimeout
#     print('读值超时',e)

# ** 处理方法二:
try:
    resp = requests.get('https://www.douban.com', timeout=0.1)
except RequestException as e:
    print(sys.exc_info()[0])  # 获取最近发生异常的对象:<class 'requests.exceptions.ReadTimeout'>
    print('请求失败:', e)  # 请求失败: HTTPSConnectionPool(host='www.douban.com', port=443): Read timed out. (read timeout=0.1)

RequestException 是 ConnectTimeout & ReadTimeout 的父类直接写一个即可

ReadTimeout 体系:

ConnectTimeout 体系:

stream=True

https://blog.csdn.net/zhanghs1989/article/details/126228042

相关资料:
reuqests 库官方文档
免费测试接口: http://httpbin.org/

posted @   chuangzhou  阅读(129)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示