You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除application/x-www-form-urlencoded请求头默认携带的charset=UTF-8

问题描述

调用接口时返回如下错误信息:

"ErrorMessage" : "Requested media type is not allowed, please verify the media type and resubmit the request"

经排查,问题出在请求头构造逻辑:发起请求时系统会默认给application/x-www-form-urlencoded类型的Content-Type头自动追加charset=UTF-8,实际发送的请求头内容为:

Content-type: application/x-www-form-urlencoded; charset=UTF-8

尝试将请求头的charset参数设置为null未生效,需要阻止该默认追加行为。

解决方法

根据你使用的HTTP请求客户端,对应调整配置即可:

  • 原生HttpURLConnection场景
    不要使用封装好的表单提交快捷方法,手动硬编码设置Content-Type请求头为纯application/x-www-form-urlencoded,写入请求体时直接写字节数组,不要使用带字符集配置的字符输出流包装连接的输出流,避免触发SDK内部自动追加charset的逻辑。
  • OkHttp/Retrofit场景
    不要使用默认的FormBody构造器构造表单请求体——默认FormBody会自动追加UTF-8的charset声明。直接自定义普通RequestBody,指定contentType为不带charset的application/x-www-form-urlencoded,将表单参数拼接为键值对字符串后转成UTF-8字节数组传入即可,参考代码:
    RequestBody formBody = RequestBody.create(
        MediaType.parse("application/x-www-form-urlencoded"),
        "param1=xxx&param2=yyy".getBytes(StandardCharsets.UTF_8)
    );
    
  • Spring RestTemplate/WebClient场景
    替换默认的FormHttpMessageConverter,重写其写入请求内容的方法,在设置Content-Type头时强制使用不带charset的MediaType.APPLICATION_FORM_URLENCODED实例,移除默认追加的charset参数即可。
  • 前端Axios/fetch场景
    Axios需要在请求拦截器里手动覆盖Content-Type头为纯application/x-www-form-urlencoded,关闭默认的表单序列化自动补全charset的配置,序列化后的表单字符串直接作为请求体发送;fetch请求则直接在headers配置里写死Content-Type值,不要让浏览器自动补全charset后缀。

内容的提问来源于stack exchange,提问作者sangam mamadapur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 15:27:15