当前位置: 首页 > article >正文

【python】requests库发起HTTP请求

requests是Python中一个非常流行的用于发送HTTP请求的第三方库。它提供了简洁的API,使得发送各种HTTP请求(如GET、POST、PUT、DELETE等)变得非常容易。

以下是一些基本的用法示例:

安装

首先,你需要安装requests库。如果你还没有安装,可以使用pip进行安装:

> pip install requests

发送GET请求

import requests

# mock data url: https://jsonplaceholder.typicode.com/
resp = requests.get("http://jsonplaceholder.typicode.com/posts/3")

if resp.status_code == 200:
    # 获取响应内容(JSON格式)
    data = resp.json()
    print(data)
else:
    print(f"请求失败,状态码:{resp.status_code}")

发送GET请求带参数

import requests

# mock data url: https://jsonplaceholder.typicode.com/
param = {
    "userId": 2
}
resp = requests.get("http://jsonplaceholder.typicode.com/posts", params=param)

if resp.status_code == 200:
    # 获取响应内容(JSON格式)
    data = resp.json()
    print(data)
else:
    print(f"请求失败,状态码:{resp.status_code}")

发送POST请求

import requests

data = {
    "userId": 11,
    "title": "requests post demo",
    "body": "requests post body"
}

resp = requests.post("http://jsonplaceholder.typicode.com/posts", data=data)

if resp.status_code == 200 or resp.status_code == 201:
    # 获取响应内容(JSON格式)
    data = resp.json()
    print(data)
else:
    print(f"请求失败,状态码:{resp.status_code}")

设置请求头

import requests
import json

# mock data url: https://jsonplaceholder.typicode.com/
data = {
    "userId": 11,
    "title": "requests post demo",
    "body": "requests post body"
}
header = {
    'Content-Type': 'application/json_demo'
}
resp = requests.post("http://jsonplaceholder.typicode.com/posts", data=json.dumps(data), headers=header)

if resp.status_code == 200 or resp.status_code == 201:
    # 获取响应内容(JSON格式)
    data = resp.json()
    print(data)
else:
    print(f"请求失败,状态码:{resp.status_code}")

设置Cookie和获取Cookie

import requests

# mock data url: https://jsonplaceholder.typicode.com/
cookies = {
    'session_id': '12345',
    'user_token': 'abcdef'
}

# 发送请求,并带上 cookies
resp = requests.get("http://jsonplaceholder.typicode.com/posts/1", cookies=cookies)

# 从响应中获取 cookies
cookies = resp.cookies.get_dict()
print(cookies)

使用Session管理Cookies

当你需要跨多个请求保持cookies时,requests.Session对象特别有用。它允许你在会话期间自动存储和发送cookies。

import requests

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

# 发送第一个请求,服务器可能会设置一些 cookies
response = session.get('https://example.com/login')

# 发送第二个请求,这次请求会自动带上之前设置的 cookies
response = session.get('https://example.com/profile')

# 你可以检查响应中的 cookies
print(session.cookies.get_dict())

处理响应

response.status_code:HTTP状态码
response.text:响应内容的字符串形式
response.content:响应内容的二进制形式
response.json():将响应内容解析为JSON对象(前提是响应内容是JSON格式)

异常处理

在发送请求时,你可能会遇到各种异常,如网络问题、无效的URL等。

可以使用try-except块来捕获这些异常:

import requests

try:
    response = requests.get('https://api.example.com/data')
    response.raise_for_status()  # 如果响应状态码不是 200,则引发 HTTPError 异常
    data = response.json()
    print(data)
except requests.exceptions.HTTPError as errh:
    print(f"HTTP 错误:{errh}")
except requests.exceptions.ConnectionError as errc:
    print(f"连接错误:{errc}")
except requests.exceptions.Timeout as errt:
    print(f"请求超时:{errt}")
except requests.exceptions.RequestException as err:
    print(f"请求错误:{err}")

打印完整的请求和响应报文包含头

import http
import logging
import requests

# 配置logging
logging.basicConfig(level=logging.DEBUG)
logging.getLogger('requests').setLevel(logging.DEBUG)
http.client.HTTPConnection.debuglevel = 1

# mock data url: https://jsonplaceholder.typicode.com/
resp = requests.get("http://jsonplaceholder.typicode.com/posts/3")

if resp.status_code == 200:
    # 获取响应内容(JSON格式)
    data = resp.json()
    print(data)
else:
    print(f"请求失败,状态码:{resp.status_code}")

http://www.kler.cn/a/466557.html

相关文章:

  • (leetcode算法题)384. 打乱数组 398. 随机数索引
  • Redis - 5 ( 18000 字 Redis 入门级教程 )
  • 深入解析 Linux 设备树中的引脚控制(pinctrl)二
  • Linux 基础七 内存
  • USB子系统学习(一)USB电气信号
  • JAVA构造方法练习
  • 职场常用Excel基础04-二维表转换
  • VS2015中使用boost库函数时报错问题解决error C4996 ‘std::_Copy_impl‘
  • 《探索机器人自主导航与路径规划技术的热点》
  • 常见的网络安全攻击技术
  • 如何在 ThinkPHP 中实现文件上传功能:实用示例
  • 网络安全:路由技术
  • HTML——63.普通按钮和隐藏域
  • word中编号统一格式
  • 青少年编程与数学 02-006 前端开发框架VUE 03课题、编写APP组件
  • ElasticSearch系列(一)
  • vue 基础参数增加多语言配置
  • 谷歌Willow芯片:量子计算为引擎加速人工智能在多领域的深度应用与变革
  • 人工智能之机器学习算法
  • 高阶数据结构----布隆过滤器和位图
  • 淘宝商品详情深度解析:利用JAVA爬虫获取item_get_pro接口
  • Git项目版本控制学习
  • 【面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据...本篇介绍Tensor RT 的优化流程。
  • python pytesseract库,ocr
  • mybatis-plus自动填充时间的配置类实现
  • Time-vulnhub打靶-Chronos