axios发送xml文件时,请求一直失败的,进行header配置

问题描述

最近开发某医院医生站系统遇到一个问题,就是通过axios给本地程序接口发送一个xml格式的报文内容,程序会驱动硬件刷卡机读出当前的卡号,本来就是一个很简单axios.post()的格式请求,只是把headers内的Content-type换成application/xml格式就行,但是实际开发时一直出现请求发出去,一直处于pending状态,但是看了本地程序的日志,已经接收到了请求,但是一直解析失败。

在这里插入图片描述

下面是封装的Api所调用的方法:

这个是我之前写的请求格式
export function getKaHaoBySheBaoOrFace(data) {
    return requestXml({
        url: "/api",
        method: "post",
        timeout: 60000,
        headers: {
            "Content-Type": "application/xml"
        },
        data
    })
}

这个是我写的请求拦截部分:

这个是我写得请求拦截,
instance.interceptors.request.use((config) => { // 配置请求头
    if (store.getters.token) {
        // let each request carry token
        // ['X-Token'] is a custom headers key
        // please modify it according to the actual situation
        config.headers['token'] = getToken()
            // windowID
        config.headers['windowID'] = getGuId()
        config.headers['X_Real_IP'] = '10.10.46.5'
    }
    return config;
}, (error) => { return Promise.reject(error); });

全程没有任何问题,而且header也加进去了,但是请求就是失败的,后端接受到到的参数就是解析不成功,然后也怀疑过是不是代理的地方出了什么问题,排查之后发现并没有问题。

排查并解决问题

后面排查之后,重新修改了请求拦截器,代码如下:

//http request 拦截器
instance.interceptors.request.use((config) => { // 配置请求头
    config.headers = {
        "Content-Type": "application/xml", // 传参方式xml
    };
    if (store.getters.token) {
        // let each request carry token
        // ['X-Token'] is a custom headers key
        // please modify it according to the actual situation
        config.headers['token'] = getToken()
            // windowID
        config.headers['windowID'] = getGuId()
        config.headers['X_Real_IP'] = '10.10.46.5'
    }
    return config;
}, (error) => { return Promise.reject(error); });

其实就是把header的content-type 写在这里了,这样就可以通了,其实我后面试了一下,只要保留这个header对象,里面不写这个格式也是可以的,但是只要把这个header={}去掉,就不行了,代码如下:

这样也是可以的
//http request 拦截器
instance.interceptors.request.use((config) => { // 配置请求头
    config.headers = {};
    if (store.getters.token) {
        // let each request carry token
        // ['X-Token'] is a custom headers key
        // please modify it according to the actual situation
        config.headers['token'] = getToken()
            // windowID
        config.headers['windowID'] = getGuId()
        config.headers['X_Real_IP'] = '10.10.46.5'
    }
    return config;
}, (error) => { return Promise.reject(error); });

结果

浏览器这边显示响应成功了,后端也可以读取到我发送的数据。
在这里插入图片描述

结论猜测

这个问题发生的有点偏门,我是没想到的,我猜可能时header合并出错的原因,当然还需要我去axios的文档里面查查看,暂时时这样解决的,如果有人知道也可以给我留言,万分感谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@lauyu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值