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

requests post json/data;requests response 接收不同数据

1、requests post json/data

在Python的requests库中,当你发送POST请求时,可以选择使用json参数或data参数来传递数据。这两者之间的主要区别在于它们如何被序列化和发送到服务器。

  1. json参数
    • 当你使用json参数时,requests库会自动将Python字典序列化为JSON格式,并将Content-Type头部设置为application/json
    • 这意味着你不需要手动将数据转换为JSON字符串,也不需要设置请求头。
    • 示例:
      import requestsurl = 'http://example.com/api'
      payload = {'key1': 'value1','key2': 'value2'
      }response = requests.post(url, json=payload)
      
    • 在这个例子中,payload是一个Python字典,通过json参数传递给requests.post()方法。requests库会自动将其序列化为JSON并设置正确的请求头。

例子:

import requestsurl = 'http://192.1***:7889/get_question'response = requests.post(url, json={"text": "水电工"})
response.json()

在这里插入图片描述

  1. data参数
    • 当你使用data参数时,你可以直接传递一个字典、字符串、元组列表或字节流。
    • 如果传递的是一个字典,requests库会将其视为表单数据,并将其编码为x-www-form-urlencoded格式(对于普通的表单提交)。在这种情况下,Content-Type头部通常会被设置为application/x-www-form-urlencoded
    • 如果传递的是一个字符串、元组列表或字节流,你需要确保数据已经是适当的格式,并且可能需要手动设置Content-Type头部。
    • 示例:
      import requestsurl = 'http://example.com/api'
      payload = {'key1': 'value1','key2': 'value2'
      }response = requests.post(url, data=payload)
      
    • 在这个例子中,payload是一个Python字典,通过data参数传递给requests.post()方法。requests库会将其视为表单数据并进行编码。

总结:

  • 使用json参数时,数据会被自动序列化为JSON,并设置Content-Typeapplication/json
  • 使用data参数时,你可以更灵活地控制数据的格式和请求头,但需要手动处理序列化和请求头的设置。

选择哪种方式取决于你的需求和API的要求。大多数现代Web API都支持JSON格式的数据,因为它是一种轻量级且易于处理的数据交换格式。如果你的API期望接收JSON数据,那么使用json参数是最简单和最直接的方法。如果你的API期望接收表单数据,或者你需要更多的控制,那么使用data参数可能更合适。

例子:

import requests
import jsonurl = 'http://192.1***:7889/get_question'response = requests.post(url, headers= {'Content-Type': 'application/json'},data=json.dumps({"text": "水电工"}))
response.json()

在这里插入图片描述

2、requests response 接收不同数据

要从requests.post()方法返回的response对象中提取结果,你可以使用以下几种方法,具体取决于响应的内容类型:

  1. 如果响应是JSON格式
    使用response.json()方法可以直接将响应内容解析为Python字典或列表。

    import requestsurl = 'http://example.com/api'
    payload = {'key1': 'value1','key2': 'value2'
    }response = requests.post(url, json=payload)if response.status_code == 200:result = response.json()print(result)  # 打印解析后的JSON对象
    else:print(f"Request failed with status code {response.status_code}")
    
  2. 如果响应是文本格式
    使用response.text属性可以获取响应的文本内容。

    import requestsurl = 'http://example.com/api'
    payload = {'key1': 'value1','key2': 'value2'
    }response = requests.post(url, json=payload)if response.status_code == 200:result = response.textprint(result)  # 打印响应文本
    else:print(f"Request failed with status code {response.status_code}")
    
  3. 如果响应是二进制数据
    使用response.content属性可以获取响应的二进制内容。

    import requestsurl = 'http://example.com/api'
    payload = {'key1': 'value1','key2': 'value2'
    }response = requests.post(url, json=payload)if response.status_code == 200:result = response.content# 处理二进制数据,例如保存文件
    else:print(f"Request failed with status code {response.status_code}")
    
  4. 如果响应包含表单数据
    使用response.form属性可以像处理字典一样处理响应中的表单数据。

    import requestsurl = 'http://example.com/api'
    payload = {'key1': 'value1','key2': 'value2'
    }response = requests.post(url, data=payload)  # 注意这里使用data而不是jsonif response.status_code == 200:result = response.form.get('key')  # 获取表单中的某个字段print(result)
    else:print(f"Request failed with status code {response.status_code}")
    

在实际应用中,你应该根据API的文档或响应头中的Content-Type来确定响应的内容类型,并相应地提取结果。通常,API文档会明确指出响应的格式和结构。

相关文章:

  • 华为安全Security认证,你了解多少?
  • Nginx之Stream(TCP/UDP)负载均衡
  • Ubuntu24多版本python解释器使用
  • 基于可视化设计的低代码开发分析与应用探讨
  • VBA技术资料MF160:提取文件夹中文件的详细信息
  • 项目计划
  • 基于QT和C++实现的中国象棋
  • Cascadia Code 字体
  • 【面试八股文】谈一谈你对TCP和UDP的区别是怎么理解的?
  • 小甲鱼——字典
  • 【并发编程实战】内存模型--解决可见性和有序性的利器
  • LoRA用于高效微调的基本原理
  • 【C语言】回调函数 和 部分库函数的用法以及模拟实现
  • 深入理解 MySQL 查询分析工具 EXPLAIN 的使用
  • 【ARMv8/ARMv9 硬件加速系列 4 -- 加解密 Cryptographic Extension 介绍】
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • co.js - 让异步代码同步化
  • CSS实用技巧干货
  • ES6系列(二)变量的解构赋值
  • JS基础之数据类型、对象、原型、原型链、继承
  • Kibana配置logstash,报表一体化
  • Promise面试题2实现异步串行执行
  • Python进阶细节
  • 阿里云Kubernetes容器服务上体验Knative
  • 悄悄地说一个bug
  • 系统认识JavaScript正则表达式
  • 自动记录MySQL慢查询快照脚本
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • #ubuntu# #git# repository git config --global --add safe.directory
  • $.ajax()
  • (2015)JS ES6 必知的十个 特性
  • (C语言)fread与fwrite详解
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (windows2012共享文件夹和防火墙设置
  • (含笔试题)深度解析数据在内存中的存储
  • (黑马C++)L06 重载与继承
  • (力扣)1314.矩阵区域和
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (一)80c52学习之旅-起始篇
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET Core 中的路径问题
  • .NET 快速重构概要1
  • .Net中的集合
  • /bin/bash^M: bad interpreter: No such file or directory
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • @拔赤:Web前端开发十日谈
  • [ACTF2020 新生赛]Include
  • [Android Studio] 开发Java 程序
  • [BZOJ 1032][JSOI2007]祖码Zuma(区间Dp)
  • [C#]winform制作圆形进度条好用的圆环圆形进度条控件和使用方法
  • [C++][基础]1_变量、常量和基本类型
  • [C++]——带你学习类和对象
  • [HNOI2008]玩具装箱toy