我使用 Jetty 7 的 ContentExchange 类来设置 URL、标头和请求内容。
以下是我使用 Jetty 7 的内容。
HttpClient client = new HttpClient();
client.start();
ContentExchange exchange = new ContentExchange();
exchange.setURL(url);
exchange.setRequestHeader("Content-Type", "application/xml");
exchange.setRequestHeader("Authorization", "Basic " + this.getAuthenticatonString());
exchange.setMethod("POST");
final AbstractBuffer cb = new ByteArrayBuffer(xml.getBytes("UTF-8"));
exchange.setRequestContent(cb);
client.send(exchange);
exchange.waitForDone();
Jetty 9 没有 ContentExchange 类,但经过一些研究我有这个
HttpClient client = new HttpClient();
client
.POST(url)
.send()
我想我可以使用 client.param 来设置请求标头,但我不太确定。
所以我的问题是如何使用 Jetty 9 设置“请求内容”和“请求标头”?
除了上面的回答,
我正在使用 Jetty 11 Http Client 并意识到 req.header 在最新版本中已被弃用。 ( 11.0.5 ).
因此,我不得不想出一种使用 Jetty Http Client 11 发送身份验证标头的方法。
我就是这样做的。注意第 4 行。
httpClient.start();
URI uri = UriBuilder.fromUri(URI.create(ENDPOINT)).path("v1/testPath").queryParam("testParam","testValue").build();
InputStreamResponseListener listener = new InputStreamResponseListener(); //Required for large responses only
httpClient.newRequest(uri).method(HttpMethod.GET).headers(httpFields -> httpFields.add("Authorization","Bearer "+token)).send(listener);
Response response = listener.get(20, TimeUnit.SECONDS);
if(response.getStatus() == 200){
//doSomething.
}
import org.eclipse.jetty.client.HttpClient;
import org.eclipse.jetty.client.Request;
import org.eclipse.jetty.client.ContentResponse;
import org.eclipse.jetty.http.HttpMethod;
import org.eclipse.jetty.http.HttpHeader;
...
HttpClient client = new HttpClient();
client.start();
Request req = client.newRequest("http://....");
req.method(HttpMethod.GET);
req.agent("Mozilla/5.0...");
req.header(HttpHeader.ACCEPT, "text/html");
req.header(HtppHeader.CONNECTION, "Keep-Alive");
ContentResponse resp = req.send():
...
client.stop();
如果有人偶然发现文档,
对于内容的情况:
req.post(OldWayOfcontentProviders)
已弃用并替换为:req.body(Request.Content oneOfFollowingImplementations)
请参考 utils(
org.eclipse.jetty.client.util
) 其中一些预定义的实现示例-
ByteBufferRequestContent
StringRequestContent
MultiPartRequestContent
...
他们都实现了 Request.Content 接口。
例子:
post.body(new ByteBufferRequestContent("text/xml", ByteBuffer.wrap("MyXMLContentAsString".getBytes)))