如何在Java http客户端中自定义“ Referer”标头

时间:2018-10-04 06:31:35

标签: java http http-referer java-11

我尝试使用JDK-11 HttpClient修改Referer标头。

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解析来修改。 对于“引用者”,这是不可能的,因为那里的客户端不知道导致此调用的先前的主机或URL。甚至该值(如果有效)也将被拒绝。可以是: -完整网址 -没有路径的网址 -仅域名

0 个答案:

没有答案
相关问题