http.request对方接口,他的contentType是"application/json"(改不了),入参该怎么配置
发布于 8 年前 作者 superlc0413 13469 次浏览 来自 问答

QQ截图20170106141126.png node新手一枚,之前用http.request, option里面的path是用接口路径+参数qs字串拼接,我试过如果被请求端的contentType 是"application/x-www-urlencoded",直接就能调通,但是他现在是"application/json",我用qs字串传参他接口就一直报400,我怎么改入参写法都不对,还请大神们指教。 由于对方服务端代码是现网,不可能改,我只想找个方法能调通contentType是"application/json"的接口

10 回复

他的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 了 QQ20170106-1@2x.png

@superlc0413 首先你需要清楚的了解对方 API。

  1. 请求 method 是 get 还是 post 还是其他
  2. 如果是 post,请求 body 的数据结构是怎样的。
  3. API 是否还需要其他的 header。

你只有了解清楚 API 的要求,才可以根据要求来写,而不是现在的靠猜的。

@DuanPengfei 你这方法发送json可以的,服务端直接拿到登录成功了。6666,谢谢大神

@zbinlin 很清楚的,他post。body不需要封装,直接json格式,我昨天只是苦于http:request里面不知道怎么传json,因为是小白;因为是登录接口,API不需要其他heade,用户名密码就可以

回到顶部