如何使用Axios向服务器发送原始无效JSON数据?
如何用Axios发送无效JSON数据测试服务器
当你设置Axios POST请求的Content-Type为application/json时,Axios会自动对请求数据进行JSON序列化处理——哪怕你传入的是无效JSON字符串,它也会把这个字符串转成合法的JSON字符串字面量,导致服务器接收到的是有效数据,无法满足你测试无效场景的需求。
比如你原本的代码:
axios.post('api/paths/invalid.json', '{"invalid: ()', { headers: { 'Content-Type': 'application/json' } })
实际发送的是"{\"invalid: ()",这是一个合法的JSON字符串,达不到测试目的。
解决方案:绕过Axios的自动序列化
要发送真正的无效JSON,你需要阻止Axios自动处理请求数据,直接发送原始的无效内容。
方法1:使用transformRequest直接返回原始数据
通过配置transformRequest,跳过Axios的默认序列化逻辑,直接把你传入的无效JSON作为请求体发送:
axios.post('api/paths/invalid.json', '{"invalid: ()', { headers: { 'Content-Type': 'application/json' }, transformRequest: [(data) => data] // 直接返回原始数据,不做JSON序列化 })
方法2:发送Blob形式的无效JSON
将无效JSON包装成Blob对象发送,Axios不会对Blob进行序列化处理:
const invalidJson = '{"invalid: ()'; const blob = new Blob([invalidJson], { type: 'application/json' }); axios.post('api/paths/invalid.json', blob, { headers: { 'Content-Type': 'application/json' } })
这两种方法都能让服务器接收到你想要的无效JSON内容,满足测试需求。
内容的提问来源于stack exchange,提问作者line-o
相关产品推荐
相关产品推荐

