Jetty 9 - 如何使用 Jetty 9 设置“请求内容”和“请求标头”?

问题描述 投票:0回答:3

我使用 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 设置“请求内容”和“请求标头”?

java jetty
3个回答
1
投票

除了上面的回答,

我正在使用 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.
    }

0
投票
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();

0
投票

如果有人偶然发现文档,

对于内容的情况:

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)))

© www.soinside.com 2019 - 2024. All rights reserved.