在Restlet中,为请求添加头信息需要使用ClientResource封装请求。

6

如何在Restlet中使用ClientResource对请求添加自定义头部?例如,当直接使用Client时可以使用以下方法:

Form headers = (Form) request.getAttributes().get(HeaderConstants.ATTRIBUTE_HEADERS);
if (headers == null) {
 headers = new Form();
 request.getAttributes().put("org.restlet.http.headers", responseHeaders);
}
headers.add("X-Some-Header", "the value");

然而,我基本上是按照他们的教程提供的代码进行操作的,我不知道应该访问ClientResource的哪个成员来设置头信息:

ClientResource clientResource = new ClientResource("http://webserviceurl");

MyClassResource classResource = clientResource.wrap(classResource.class);

MyClass class;

try { class = resource.retrieve(); } catch (Exception e) { System.out.println("fail."); }

我该如何修改retrieve()方法以添加一些头部信息?

3个回答

13

ClientResource方法有一个getRequestAttributes方法,它是以下代码的快捷方式:getRequest().getAttributes()

因此,您可以使用它来为请求指定自定义标题,如下所述:

ClientResource cr = new ClientResource("...");
Series<Header> headers = cr.getRequestAttributes().get(
                                 "org.restlet.http.headers");
headers.set("<header-name>", "<header-value>");

请注意,大多数头信息默认由Restlet管理。要查看支持哪些标头,请参阅HeaderUtils类:https://github.com/restlet/restlet-framework-java/blob/master/modules/org.restlet/src/org/restlet/engine/header/HeaderUtils.java

编辑

在最新版本的Restlet(2.3)中,添加了一个名为getHeaders 的方法:

ClientResource cr = new ClientResource("...");
Series<Header> headers = cr.getHeaders();
headers.set("<header-name>", "<header-value>");

这对应于自定义头信息。

希望会对你有所帮助。 Thierry


我在这段代码中遇到了以下错误:类型不匹配:无法将Object转换为Series<Header>。 - ademar111190
4
使用2.1.2版本: Series<Header> headers = (Series<Header>) res.getRequestAttributes().get("org.restlet.http.headers"); 如果headers为空,则创建一个新的Header类序列。 向headers添加"user"和"password"两个属性,值分别为"abcd1"和"welcome"。 - Ashwin Jayaprakash
@thierry-templier,不好意思打扰你的谈话,但你能帮我解决这个问题吗?http://stackoverflow.com/questions/35383763/how-to-get-mediatype-from-request - quarks

3
如果您正在使用restlet 2.0.x(最新的稳定版本),需要执行以下操作:
ClientResource resource = new ClientResource(yourUrl);
Form headers = (Form)resource.getRequestAttributes().get("org.restlet.http.headers");
if (headers == null) {
    headers = new Form();
    resource.getRequestAttributes().put("org.restlet.http.headers", headers);
}
headers.add("yourHeaderName", yourHeaderValue);
resource.get();
Response response = resource.getResponse();
String text = response.getEntity().getText();
String status = response.getStatus().toString();

1

这个方法对我有用,所以我分享一下。

        ClientResource client = new ClientResource(uri);

        Series<Header> headerValue = new Series<>(Header.class);
        Request request = client.getRequest();
        headerValue.add("header name", "header value");
        request.getAttributes().put(HeaderConstants.ATTRIBUTE_HEADERS, headerValue);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接