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

发送URL请求中的问题记录

报错 Unsupport Media Type

先检查请求头中的 Content-Type,通常使用json格式 -> application/json

检查的MIME类型:当服务器指定MIME类型时,如application/xml

服务器可能还是用User-Agent判断请求媒体类型,使用正确的编码如Content-Type:chatset=utf-8

使用不同请求方式传参

POST(添加)/PUT(修改):三个参数 url、data、config;

POST 可以提交比 GET 更大的数据量,相对更安全,请求参数不会被包含在 URL 中;对服务器性能的影响较大,不适用于对同一资源进行多次操作。

PUT 可以更新指定的资源;对服务器性能的影响较大,不适用于对同一资源进行多次操作。

GET(查询)/DELETE(删除):两个参数 url、config,在GET中将入参数据作为config中的params属性值,拼接在url上,而DELETE可以拼接在url上或以request body 形式发送。

GET 可以被缓存和浏览器保存,对服务器性能的影响较小;不适合用于提交敏感数据,仅适用于对资源进行查询操作,不能修改服务器端的状态。

DELETE 可以永久删除指定的资源;对服务器性能的影响较大,不适于对同一资源多次操作。

headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
}
requests.post(url=register_url, headers=headers, data=json.dumps(register_info))
requests.put(url=update_url, headers=headers, data=json.dumps(register_info))

params = {"serviceId": service_id}
response = requests.get(url=search_url, headers=headers, params=params)

info = {"serviceId": service_id, "appid": app_id}
requests.delete(url=delete_url, headers=headers, params=info)
requests.delete(url=delete_url, headers=headers, data=info)

注意:参数中如果有特殊字符如“%”等需要转义,否则会报错。

url中的转义问题

使用flask框架连接数据库,遇到密码中含有特殊字符‘@’,在做url解析时会将密码和host切分错误,导致连接失败;

解决:

对‘@’做url的转义,变为‘%40’ -> 字符的ASCII码(16进制),问题解决;在使用GET等方法发送请求时也会遇到类似问题,可将特殊符号做 url 转义;

%2C:',',%40:'@',%3A:':',%20:space,%5B:'[',%5D:']',%23:'#',%2B: +,%2F:/,%3F:?,%26:&,%3D:=,

上传文件

上传文件时通常使用multipart/form-data格式构建请求数据,可能会遇到 Failed to parse multipart servlet request,通常是由于服务器无法正确解析发送的 multipart/form-data 请求造成的。

上传文件时需要使用requests的multipart_encoder.MultipartEncoder构建请求主体;

import requests
from requests_toolbelt import MultipartEncoder

file_data = open()
multipart_encoder = MultipartEncoder(
    fields={
        'file': ('example.txt', file_data, 'text/plain'),
        'name': 'John'
    }
)
headers = {'Content-Type': multipart_encoder.content_type}
res = requests.post(url, data=multipart_encoder, headers=headers)

对yaml文件upload_type为application/octet-stream
其他文件可使用application/json
files = [('fileDescriptor', (file_name, file, upload_type))]
res = requests.post(upload_url, headers=headers, data={}, files=files)

参考:

详解HTTP四种请求:POST、GET、DELETE、PUT-阿里云开发者社区

python Failed to parse multipart servlet request; nested exception is java.l_mob649e81680b4f的技术博客_51CTO博客


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

相关文章:

  • JS宏进阶:正则表达式介绍
  • K8S中Pod控制器之Job控制器
  • HTML知识点复习
  • java基础概念59-File
  • 设计和优化用于 AR、HUD 和高级显示系统的表面浮雕光栅
  • Armv8/Armv9架构从入门到精通-介绍
  • [LeetCode] 844. 比较含退格的字符串
  • ubuntu22.04安装mysql5.7
  • 综合小案例
  • foxy moveit2 小鱼
  • 珠海自闭症寄宿学校:打造温馨家庭般的学习氛围
  • mongodb的相关关键字说明
  • 记录使用datagrip备份数据库信息
  • 基于Java微信小程序的学生签到系统的详细设计和实现(源码+lw+部署文档+讲解等)
  • 【SPIE独立出版】第四届计算机、信息工程与电子材料国际学术会议 (CTIEEM 2024,2024年11月15-17日 )
  • CrossSim安装教程
  • 基于SpringBoot+Vue+uniapp的在线招聘平台的详细设计和实现
  • 电动汽车上下电控制策略的设计方法——钥匙ON_START上高压流程
  • Linux防火墙常用命令centos7
  • 机器学习和深度学习常用的工具库
  • Java基础概览和常用知识(七)
  • 基于SpringBoot问卷调查系统小程序【附源码】
  • C# 图像镜像
  • 微信小程序 - 供应链系统设计
  • Linux性能分析
  • 如何在Ubuntu上更改MySQL数据存储路径