node新手一枚,之前用http.request, option里面的path是用接口路径+参数qs字串拼接,我试过如果被请求端的contentType 是"application/x-www-urlencoded",直接就能调通,但是他现在是"application/json",我用qs字串传参他接口就一直报400,我怎么改入参写法都不对,还请大神们指教。 由于对方服务端代码是现网,不可能改,我只想找个方法能调通contentType是"application/json"的接口
他的api是怎样的?提供给你一个怎样的接口? 是get请求还是post请求? 如果是post请求, 那么这个path后面就不需要这个?+paramStr之类的,如果是get,可以测试直接访问试试
把 paramStr 改成 JSON 字符串,然后把它 write 给服务端。
@liujavamail 是post接口,是一个.do,只有两个参数,phone和password都传了,是这样的,我用这个写法调用我自己写的nodejs-post接口就ok,调用对方(java)的post接口就400,我知道是contentType的原因,但是现在对方代码是不允许修改的。
@zbinlin 试过了。然而还是400,我的确听有的同事讲"application/json"很坑,难道对面是application/json就无解了吗?
如果是post请求的话,你的options就应该是
var options = {
host: "118.178.240.188",
port: 80,
path: outerUrl,
method: "POST"
headers: {
'Content-Type':' application/json'
}
}
var data = {
// method 是提交到那个url里面的方法
'method': method,
'params': {
'phone': phone,
'password':password
}
}
var req = http.request(options, function(resp) {
resp.on('data', function(chunk) {
// 请求返回的chunk
})
})
req.write(JSON.stringify(data))
req.on('error', function(e) {})
这个是我发起post请求的一个例子
@liujavamail 好,我来试一把
使用 request.js
包的示例
// 请求代码
let requestOptions = {
url: 'http://127.0.0.1:3000',
method: 'POST',
json: {
phone: '18xxxxxxxxx',
password: 'pass****'
}
};
request(requestOptions, function (error, response, body) {
console.log(JSON.stringify(body, undefined, 4));
});
模拟 Java API 接收请求并打印出请求的 headers 与 body,可以看到接收到的请求 Content-Type 已经是 application/json 了
@superlc0413 首先你需要清楚的了解对方 API。
- 请求 method 是 get 还是 post 还是其他
- 如果是 post,请求 body 的数据结构是怎样的。
- API 是否还需要其他的 header。
你只有了解清楚 API 的要求,才可以根据要求来写,而不是现在的靠猜的。
@DuanPengfei 你这方法发送json可以的,服务端直接拿到登录成功了。6666,谢谢大神
@zbinlin 很清楚的,他post。body不需要封装,直接json格式,我昨天只是苦于http:request里面不知道怎么传json,因为是小白;因为是登录接口,API不需要其他heade,用户名密码就可以