Google Pub / Sub Emulator - 使用Java的HTTP.POST发布消息会引发400 Bad Request

时间:2017-06-27 14:08:25

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

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

URL: 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客户端执行此操作则不会。

这里有什么明显的东西我不见了吗?

1 个答案:

答案 0 :(得分:1)

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

我认为,这个特定的实现是为了与neo4j测试服务器一起工作,必须做一些超出简单HTTP请求的事情(添加一些标题或其他东西),导致请求与我从YARC发送的请求有所不同。