问题现象
- 问题一:HTTP表单方式POST后抓包发现Body中没有对应的内容,HTTP表单POST方式应该如何传递Body?
- 问题二:extraData值为'aaaa'可以正常发送,但发'aa%3D%3Da'报错{"status":"-1","message":"非法请求!"}。
- 问题三:构建GET请求时,请求URL会被自动附加一个多余的&符号。
解决方案
- 问题一:参考HTTP请求如何以表单形式进行传输。
- 问题二:
- 检查服务端配置:确保服务端能够正确处理URL编码字符。如果服务端不支持直接传递编码后的字符串,需要在客户端解码后再发送。
- 修改extraData的值:尝试在发送前将extraData中的URL编码字符转换回原始字符。使用JavaScript的decodeURIComponent函数来解码,然后将decodedData作为extraData的值发送。
- 确认请求格式:检查extraData的格式是否符合服务端的要求。
- 问题三:检查extraData的值是否为空字符串:当HTTP请求为GET,有extraData参数且不为undefined或者null,URL中已有?参数分隔符时,会在URL末尾拼接&和extraData参数。如果extraData的值为空字符串,会表现为URL结尾只拼接了多余的&分隔符。
总结
extraData支持string、Object、ArrayBuffer三种数据类型,且长度没有限制,根据业务场景extraData入参也有所不同:
- 当HTTP请求为POST、PUT等方法时,此字段为HTTP请求的content,以UTF-8编码形式作为请求体。
- 当'content-Type'为'application/x-www-form-urlencoded'时,请求提交的信息主体数据必须在key和value进行URL转码后(encodeURIComponent/encodeURI),按照键值对"key1=value1&key2=value2&key3=value3"的方式进行编码,该字段对应的类型通常为string。
- 当'content-Type'为'text/xml'时,该字段对应的类型通常为string。
- 当'content-Type'为'application/json'时,该字段对应的类型通常为Object。
- 当'content-Type'为'application/octet-stream'时,该字段对应的类型通常为ArrayBuffer。
- 当'content-Type'为'multipart/form-data'且需上传的字段为文件时,该字段对应的类型通常为ArrayBuffer。
- 当HTTP请求为GET、OPTIONS、DELETE、TRACE、CONNECT等方法时,此字段为HTTP请求参数的补充。开发者需传入Encode编码后的string类型参数,Object类型的参数无需预编码,参数内容会拼接到URL中进行发送。ArrayBuffer类型的参数不会做拼接处理。
- 发起HTTP请求时,extraData为可选配置参数,发送请求的额外数据,默认无此字段。没有额外数据时,避免添加该参数;若必须添加,请填写undefined或者null,避免直接传入空字符串。