Как настроить заголовок «Referer» в Java-клиенте http - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь изменить заголовок Referer с помощью JDK-11 HttpClient.

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Test {
    public static final void main(final String[] argc) throws IOException, InterruptedException {
        final HttpClient client = HttpClient.newHttpClient();
        final HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("http://suche.org/refererDemo"))
                .header("Referer", "google.com")
                .build();
        final HttpResponse<String> ret = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println("ret: "+ret.body());
    }
}

Но я получаю сообщение об ошибке:

Exception in thread "main" java.lang.IllegalArgumentException: restricted header name: "Referer"
    at java.net.http/jdk.internal.net.http.common.Utils.newIAE(Utils.java:246)
    at java.net.http/jdk.internal.net.http.HttpRequestBuilderImpl.checkNameAndValue(HttpRequestBuilderImpl.java:110)
    at java.net.http/jdk.internal.net.http.HttpRequestBuilderImpl.header(HttpRequestBuilderImpl.java:126)
    at java.net.http/jdk.internal.net.http.HttpRequestBuilderImpl.header(HttpRequestBuilderImpl.java:43)
    at Test.main(Test.java:12)

Обычно я ожидаю, что любой действительный хостдолжно быть принято.Так как это используется для контроля доступа с какой-то стороны.Это ошибка или есть новый способ установки реферера?

Вопрос в двух отношениях отличается от вопроса о заголовке "Host".Заголовок хоста устанавливается на основе URL.Это можно изменить с помощью разрешения dns или etc / host.Это невозможно с «Referer», потому что там клиент не знает предыдущего хоста или URL, которые вызывают этот вызов.И даже значение, если оно действительно, отклоняется.Это может быть: - Полный URL - URL без пути - Только доменное имя

...