Добавьте заголовки к запросу, обернутому ClientResource в Restlet - PullRequest
6 голосов
/ 22 марта 2012

Как добавить собственные заголовки к запросу, обернутому ClientResource в Restlet? Например, я прочитал, что вы можете использовать следующее при работе непосредственно с 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 голосов
/ 23 марта 2012

Метод 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

3 голосов
/ 18 сентября 2012

Если вы используете 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();
0 голосов
/ 05 сентября 2018

Это сработало для меня, поэтому я делюсь этим.

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