记一次使用axios设置header不生效的问题

日常开发中,后台请求接口使用post的时候有3种情况

  1. 普通的post请求,数据是以json的形式提交到后台,对应Content-type:application/json
  2. 上传文件,数据是以FormData的形式提交到后台,工具会自动处理请求头,对应Content-type:multipart/form-data
  3. 表单形式提交需要设置对应Content-type:application/x-www-form-urlencoded
Content-Type: application/json : 
请求体中的数据会以json字符串的形式发送到后端
Content-Type: application/x-www-form-urlencoded:
请求体中的数据会以普通表单形式(键值对)发送到后端
Content-Type: multipart/form-data: 
它会将请求体的数据处理为一条消息,以标签为单元,用分隔符分开。
既可以上传键值对,也可以上传文件。

项目中遇到了需要表单形式的提交,然后设置了Content-type,结果请求的时候没有生效,找了好久原因,也Google了好久都没解决,最后静下心来检查了一下代码,发现是axios封装的有问题
封装代码如下:

 // 请求拦截器
  /****** request拦截器==>对请求参数做处理 ******/
service.interceptors.request.use(config => {
  app.$vux.loading.show({
    text: '数据加载中……'
  });
 
  config.headers = {
        "Accept-Language":"en-CN;q=1.0",
        "source_type":"apple-appstore",
        "version_code":"5.4.8",
        "Content-Type":"application/json",
        "push_device_type":"4",
        "Accept": "*/*"
      }
 
  return config;
}, error => { //请求错误处理
  app.$vux.toast.show({
    type: 'warn',
    text: error
  });
  Promise.reject(error)
})

接口请求代码如下:

export function checkBlackWord(baseURL,data){
    return request.request({
        url:"/v1/Message/CheckBlackWord",
        method:"post",
        data:qs.stringify(data),
        baseURL,
        headers:{
            "Content-Type": "application/x-www-form-urlencoded"
        }
    })
}

如上造成的现象是接口请求中设置的"Content-Type": "application/x-www-form-urlencoded不生效,浏览器调试显示的依然是Content-Type":"application/json
最后定位原因是axios请求封装直接设置headers为一个新对象,这种不管接口请求中设置任何header都会被覆盖,所以修改后如下:

 // 请求拦截器
  /****** request拦截器==>对请求参数做处理 ******/
service.interceptors.request.use(config => {
  app.$vux.loading.show({
    text: '数据加载中……'
  });
 
  let headers = {
        "Accept-Language":"en-CN;q=1.0",
        "source_type":"apple-appstore",
        "version_code":"5.4.8",
        "Content-Type":"application/json",
        "push_device_type":"4",
        "Accept": "*/*"
      }
  config.headers = {...headers,...config.headers}//如果不这样写,那么在接口中设置的header都会被覆盖
  return config;
}, error => { //请求错误处理
  app.$vux.toast.show({
    type: 'warn',
    text: error
  });
  Promise.reject(error)
})

利用对象的解构赋值语法,合并接口的配置和统一的配置

### 回答1: 在 Karma Proxies 中,可以使用 `beforeSend` 函数来设置请求头部。该函数接收一个参数,即请求对象,可以对其进行修改。 示例代码: ``` karmaProxies.proxies = { '/api/*': { target: 'http://localhost:3000', beforeSend: function(req) { req.setRequestHeader('X-Custom-Header', 'value'); } } }; ``` 这样, 每次在请求匹配 '/api/*' 的请求时, 都会在请求头部添加 X-Custom-Header:value。 ### 回答2: Karma Proxies 是一个可以用于进行代理请求的工具,通过设置 headers 可以实现更灵活的请求管理。 在使用 Karma Proxies 进行代理请求时,通过设置 headers 可以对请求的头部信息进行修改和添加。这可以用于模拟特定的请求环境,也可以用于伪装请求的来源,增加请求的安全性。 要设置 headers,首先需要创建一个 headers 对象,包含要设置的头部信息。可以通过设置键值对的方式,指定特定的头部字段和对应的值。例如,可以设置 User-Agent 头部字段来模拟同的用户代理: ```javascript const headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36' }; ``` 接下来,在进行代理请求时,可以将 headers 对象作为参数传入。例如,使用 axios 发送一个 GET 请求: ```javascript axios.get('https://example.com', { headers }) .then(response => { // 处理响应数据 }) .catch(error => { // 处理错误 }); ``` 以上代码中,通过传入 headers 对象,可以在发送请求时自动包含指定的头部信息。 除了设置键值对的方式,还可以使用方法来动态设置 headers。例如,可以使用 axios 的 interceptors 在每个请求前动态设置 headers。这样可以根据需求在同的请求中设置同的头部字段和值。 总之,通过设置 headers,可以在使用 Karma Proxies 进行代理请求时轻松地修改和添加头部信息,实现更灵活的请求管理和模拟同的请求环境。 ### 回答3: Karma Proxies是一个用于代理服务器的软件。为了设置header,需要在Karma Proxies的配置文件中进行相应的操作。 首先,在Karma Proxies的配置文件中找到要设置header的位置,在该位置添加如下代码: ``` headers: { 'HeaderName1': 'HeaderValue1', 'HeaderName2': 'HeaderValue2' } ``` 在代码中,'HeaderName1'和'HeaderName2'分别是要设置header的名称,'HeaderValue1'和'HeaderValue2'分别是对应header的值。你可以根据自己的需求添加或删除更多的header。 例如,如果我们想在header设置User-Agent,可以如下设置: ``` headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } ``` 以上代码将在每个请求的header中添加一个User-Agent字段,并将其值设置为指定的字符串。 接下来,保存配置文件并重新启动Karma Proxies。这样,你的设置就会生效。当使用Karma Proxies进行代理时,会自动在请求的header设置你指定的header。 通过这样的设置,你可以为每个请求自定义header,以满足同的需求,例如模拟特定的浏览器环境或传递特定的认证信息等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值