【问题标题】:Need to specify order of HTTP request elements in Node.js需要在 Node.js 中指定 HTTP 请求元素的顺序
【发布时间】:2018-05-17 04:43:30
【问题描述】:

我正在尝试在我们的节点 (express.js) 服务器和供应商服务器之间建立持久连接。我们目前正在使用“request" 库,尽管我们可以轻松地移至其他库。https://www.npmjs.com/package/request

供应商告诉我们 Post 请求的主体(到他们的 API)需要在 Content-Type, charset, 等之前出现。所以像这样:

"POST / HTTP/1.1\r\nREQUEST_JSON_API: **{\"REQUEST_TYPE\":\"STATUS\"}** \r\nContent-Type: application/json\r\ncharset: utf-8\r\nUser-Agent.."  

而不是目前的情况:

"POST / HTTP/1.1\r\nhost: xxx.x.xxx.1:3000\r\naccept: application/json\r\ncontent-type: application/json\r\ncontent-length: 25\r\nConnection: keep-alive\r\n\r\n **{\"REQUEST_TYPE\":\"STATUS\"}**"  

请问有人对如何解决这个问题有任何建议吗?

【问题讨论】:

  • 我猜你只是想手动发送。正如你在这里写的。 %)P
  • POST 的正文出现在标题之前是没有意义的。那不是HTTP。您的第一个示例根本没有显示这一点。它显示了一个名为 REQUEST_JSON_API: 的自定义标头,其中包含一些 JSON 作为该标头的值。它没有向 POST 显示任何正文,因为正文在 \r\n\r\n 之后,而您在第一个示例中没有这些正文。
  • 您应该能够使用request() 库轻松指定名为REQUEST_JSON_API: 的自定义标头。你试过了吗?
  • 在我看来,您误解了他们想要什么。您正试图将数据放在 POST 正文中,但显然他们希望将数据放在自定义标头中。那是合法的 HTTP,只是与您尝试发送的不同。您可以使用任何普通的 HTTP 库(例如 request() 库)来做到这一点。您只需要构建正确的自定义 HTTP 标头并在 POST 请求中指定。
  • 不,我不认为这是一个好的设计,只是他们这样做的方式,所以你必须以这种方式创建请求才能使其工作。无需研究优势。

标签: node.js http https npm-request


【解决方案1】:

我会把我的 cmets 变成一个答案,因为它显然解决了你原来的问题:

在我看来,你误解了他们想要什么。您正在尝试将数据放入 POST 正文中,但显然他们希望 JSON 数据位于名为 REQUEST_JSON_API 的自定义标头中,而 POST 正文中没有任何内容。这与您尝试发送的内容不同。

您可以使用任何普通的 HTTP 库(例如 request() 库)来做到这一点。您只需构建正确的自定义 HTTP 标头并在 POST 请求中指定。

您可以查看如何使用request()here 设置自定义标头。

【讨论】:

  • 我不知道你为什么被否决。我明白我为什么会误解这个问题。无论如何......它似乎对我们有用?我认为您正确地识别了我的误解,并以令人钦佩的尊重和信息丰富的方式提出了一个可行的解决方案。再次感谢您!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-30
  • 1970-01-01
相关资源
最近更新 更多