当前位置: 首页 > 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文档会明确指出响应的格式和结构。

http://www.lryc.cn/news/372801.html

相关文章:

  • 【qt】平面CAD(计算机辅助设计 )项目 上
  • C++中bool类型的使用细节
  • Java 面向对象 -- Java 语言的封装、继承、多态、内部类和 Object 类
  • 【C++】和【预训练模型】实现【机器学习】【图像分类】的终极指南
  • HTML5 Web SQL数据库:浏览器中的轻量级数据库解决方案
  • C++ const关键字有多种用法举例
  • Makefile-快速掌握
  • 定个小目标之刷LeetCode热题(20)
  • 短剧分销小程序:影视产业链中的新兴力量
  • 使用fvm切换flutter版本
  • python通过selenium实现自动登录及轻松过滑块验证、点选验证码(2024-06-14)
  • 【C++】开源项目收集
  • 爬虫相关面试题
  • Spring Cloud Netflix 之 Ribbon
  • C语言怎样记住那么多的颜⾊?
  • LabVIEW软件开发任务的工作量估算方法
  • 【已解决】引入 element 组件无法使用编译错误 ERROR Failed to compile with 1 error
  • Prometheus的四种指标类型
  • FastDFS SpringBoot 客户端 Demo搭建,支持文件上传下载
  • 十大成长型思维:定位思维、商业思维、时间管理思维、学习成长思维、精力管理思维、逻辑表达思维、聚焦思维、金字塔原理、目标思维、反思思维
  • GraphQL(9):Spring Boot集成Graphql简单实例
  • vue3+ Element-Plus 点击勾选框往input中动态添加多个tag
  • 唯美仙侠手游【九幽仙域】win服务端+GM后台+详细教程
  • Qt creator day2练习
  • 哪里有海量的短视频素材,以及短视频制作教程?
  • 文章MSM_metagenomics(三):Alpha多样性分析
  • Web前端与其他前端:深度对比与差异性剖析
  • AI 客服定制:LangChain集成订单能力
  • 【计算机毕业设计】242基于微信小程序的外卖点餐系统
  • java程序监控linux服务器硬件,cpu、mem、disk等