发送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博客

<think>我们正在处理用户关于NewLand平台通过GET请求发送包含Access Token的URL格式的问题。 根据用户提供的参考引用[^1],其中提到了一个`getToken`方法,用于获取token。因此,我们可以推断用户需要知道如何构造一个包含Access Token的GET请求URL。 通常,在GET请求发送Access Token有两种常见方式: 1. 作为查询参数(Query Parameter)附加在URL后面,例如:`?access_token=TOKEN_VALUE` 2. 通过HTTP头部(Header)发送,例如:`Authorization: Bearer TOKEN_VALUE` 但是,用户明确要求的是“GET请求 Access Token 发送格式”,并且提到了URL,因此我们重点介绍第一种方式(作为查询参数)。 在NewLand平台的API调用中,具体的格式可能取决于其API文档的要求。但常见的做法是: - 在获取token的接口(如`getToken`)返回token后,将token作为参数附加在后续请求URL中。 例如,假设有一个获取设备信息的API,原始URL是: `https://api.newland.com/device/info` 那么在获取到token(假设为`abcdef123456`)后,构造的GET请求URL为: `https://api.newland.com/device/info?access_token=abcdef123456` 或者,有些API可能要求使用其他参数名,比如`token`,那么URL可能是: `https://api.newland.com/device/info?token=abcdef123456` 由于NewLand平台的具体要求可能有所不同,建议用户查阅NewLand平台的API文档以确认参数名。 另外,参考引用[^1]中提到的`getToken`方法参数为`app_key`和`app_secret`,说明获取token需要这两个凭证。因此,在获取token后,后续的API请求就需要带上这个token。 总结步骤: 1. 调用`getToken`方法(使用`app_key`和`app_secret`)获取Access Token。 2. 在后续的GET请求中,将Access Token作为查询参数附加在URL中。 注意:将token放在URL中可能存在安全风险,因为URL可能会被记录在服务器日志中。因此,更推荐使用HTTP头部的方式(如Authorization头)。但用户要求的是URL格式,所以我们按照URL格式给出。 如果用户有NewLand平台的具体API文档,请以文档为准。 §§相关问题§§ 1. 如何安全地存储和使用Access Token? 2. NewLand平台API的认证方式有哪些? 3. 除了GET请求,POST请求如何发送Access Token? 4. Access Token的有效期是多久?如何刷新?</think>### NewLand GET请求 Access Token发送格式 在NewLand平台上,通过GET请求发送包含Access Token的URL格式通常遵循以下规范: 1. **获取Access Token** 首先需调用`getToken`方法获取有效token(参考引用[^1]): ```java public ResultVO getToken(String app_key, String app_secret) ``` - 需在**15分钟内**将获取的token入库 - 返回数据结构通常包含`access_token`字段 2. **GET请求URL格式** 在后续GET请求中,Access Token以查询参数形式附加在URL末尾: ``` https://api.newland.com/目标接口路径?access_token=你的Token值&其他参数=参数值 ``` **示例**: ``` https://api.newland.com/v1/devices/list?access_token=abc123def456&page=1&size=10 ``` 3. **关键细节** - **参数名**:通常使用`access_token`作为标准参数名(部分接口可能用`token`) - **位置**:必须作为URL的**查询字符串(Query String)** 出现 - **效性**:token有效期通常为2小(具体以API文档为准) - **安全要求**:必须通过HTTPS协议传输 4. **完整调用流程**: ```mermaid graph LR A[调用getToken获取token] --> B[15分钟内入库] B --> C[构造GET请求URL] C --> D[添加access_token参数] D --> E[发送API请求] ``` > **注意**:实际参数命名和有效期请以NewLand平台最新API文档为准。若接口返回`401 Unauthorized`错误,通常表示token已过期需重新获取[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值