【问题标题】:Google Pub/Sub Emulator - Publishing message using Java's HTTP.POST throws 400 Bad RequestGoogle Pub/Sub Emulator - 使用 Java 的 HTTP.POST 发布消息会引发 400 Bad Request
【发布时间】:2017-06-27 14:08:25
【问题描述】:

我的机器上本地运行 Google Pub/Sub 模拟器。我可以使用 YARC (Yet Another REST Client) 发布消息,其中包含以下详细信息:

网址: POST http://localhost:8311/v1/projects/my-project/topics/my-project-test:publish

有效载荷:

{
  "messages": [
    {
      "attributes": {
        "1": 1
      }
    }
  ]
}

这会导致 200 响应,我可以在模拟器的控制台输出中看到收到了消息。

现在,当我尝试使用 Java 的 HTTP 库执行相同操作时,我一直收到 400 错误。代码如下:

String payload = "{\"messages\":[{\"attributes\":{\"1\":1}}]}";

HTTP.Response response = HTTP.POST(options.getPubsubRootUrl() + "/v1/projects/my-project/topics/my-project-test:publish", payload);

我在调试器中检查了头文件,发现它们是:

Content-Type: application/json

Content-length: ####(some number)

我也在从 REST 客户端发送 Content-TypeContent-length 也可能在幕后发送)

据我所知,这些请求是相同的,但由于某种原因,从我的 Java 代码执行此操作会导致错误,而从 REST 客户端执行此操作则不会。

我错过了什么明显的东西吗?

【问题讨论】:

  • 能否请您指定这个 HTTP 类是什么?对我来说,它似乎不是标准 Java 的一部分。
  • @BalázsNemes 哦,哇,这总是最简单的事情......我从代码中的其他地方复制了那行,它实际上是org.neo4j.test.server.HTTP - 当我粘贴到 Eclipse 中时自动导入。更改为 Unirest 并且可以正常工作 - 谢谢!随意添加一个答案,我会接受它
  • 酷,实际上我没有使用过任何一个,但会在需要时尝试 Unirest。

标签: java rest http-headers google-cloud-pubsub


【解决方案1】:

原来我认为是标准 Java 类的 HTTP 类是 org.neo4j.test.server.HTTP,当我从代码中的其他地方复制该行时,它在 Eclipse 中自动导入。

我相信,该特定实现旨在与 neo4j 测试服务器一起使用,并且必须做一些超出简单 HTTP 请求(添加一些标头或其他内容)的事情,从而导致请求与我从 YARC 发送的请求有所不同。

【讨论】:

    最近更新 更多