我需要编写一个HTTP客户端,通过其REST API与Floodlight OpenFlow控制器进行通信。
为了测试我在python中做了它,它工作正常。但现在我处于必须用Java完成的情况,我承认它仍然处于初学者的水平。我的一个应用程序使用AsyncHttpClient来分派异步GET请求,并且工作得很好。现在作为Floodlight的REST客户端,它必须使用JSON编码的主体进行POST和DELETE。我的异步POST请求代码非常符合预期。
但DELETE没有运气。
不知何故,它不会将JSON字符串写入其请求主体。 代码几乎与POST相同。对于调试,我不会将AsyncCompletionHandler实例提供给execute()方法。
System.out.println(ofEntry.toJson()); // this returns {"name": "xyz"} as expected.
Future<Response> f = httpClient.prepareRequest(new RequestBuilder("DELETE")
.setUrl("http://" + myControllerBaseUrl + urlPathFlowPostDelete)
.setHeader("content-type", "application/json")
.setBody(ofEntry.toJson())
.build()).execute();
System.out.println(f.getStatusCode()); // returns 200.
System.out.println(f.getResponseBody()); // returns {"status" : "Error! No data posted."}.
为了确保,我用wireshark偷看了数据包转储,发现服务器没有说谎:)
图书馆的作者撰写了大量相关的,有价值的信息,但遗憾的是我找不到专门用于构建DELETE请求的示例代码。
我非常感谢任何建议,指针,当然还有针对性的解决方案!
答案 0 :(得分:0)
不确定回答我自己的问题是否恰当,但我刚刚在Floodlight-dev Google小组中找到了相关主题。
Problem with Static Flow Pusher DELETE REST method
因此,这可能是Floodlight REST API的一个问题,它需要DELETE请求的邮件正文来标识要删除的内容,而AHC只是符合RFC2616。
我将关注Google小组的主题,看看它将如何在开发人员之间得出结论。