我正在尝试使用Jetty HttpClient将JSON字符串发送到服务器,但我没有找到任何关于如何做到这一点的好例子,只请求客户端通过POST发送简单参数的位置。
我设法使用Apache HttpClient发送请求,但是当我执行下一个请求时,我有问题要保持会话。
// rpcString is a json like {"method":"Login","params":["user","passw"],"id":"1"}:
entity = new StringEntity(rpcString, HTTP.UTF_8);
HttpPost httpPost = new HttpPost("http://site.com:8080/json/users");
entity.setContentType("application/json");
httpPost.setEntity(entity);
client = HttpClientBuilder.create().build();
CloseableHttpResponse response = (CloseableHttpResponse) client.execute(httpPost);
如果可能,我喜欢使用jetty API客户端做同样的事情。
感谢。
答案 0 :(得分:1)
这个问题真的很老了,但我遇到了同样的问题,这就是我解决的问题:
// Response handling with default 2MB buffer
BufferingResponseListener bufListener = new BufferingResponseListener() {
@Override
public void onComplete(Result result) {
if (result.isSucceeded()) {
// Do your stuff here
}
}
};
Request request = httpClient.POST(url);
// Add needed headers
request.header(HttpHeader.ACCEPT, "application/json");
request.header(HttpHeader.CONTENT_TYPE, "application/json");
// Set request body
request.content(new StringContentProvider(JSON_STRING_HERE), "application/json");
// Add basic auth header if credentials provided
if (isCredsAvailable()) {
String authString = username + ":" + password;
byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes());
String authStringEnc = "Basic " + new String(authEncBytes);
request.header(HttpHeader.AUTHORIZATION, authStringEnc);
}
request.send(bufListener);
答案 1 :(得分:0)
要使用Apache HttpClient保留会话,您需要创建HttpClient
实例一次,然后将其重复用于所有请求。
我不知道Jetty HTTP客户端API的工作原理,但一般情况下,您只需要构建一个POST请求,并将编码为UTF-8字节的JSON数据添加为请求内容。