如何在Java中处理419 http响应

Tom*_*sen 5 java apache-httpclient-4.x

我试图解析一个特定的网站,当我的 java 代码调用它时,我得到了 419 的 HTTP 响应代码。我需要解析响应以查找内容,但我陷入了响应代码。

我尝试使用 apache http 客户端(版本 4.5.6)编写一个 Java 程序来调用我需要解析的网站。我得到的http响应代码是419。

try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
    HttpGet httpGet = new HttpGet("http://www.website.com");
    try (CloseableHttpResponse response1 = httpclient.execute(httpGet)) {
        System.out.println(response1.getStatusLine());
        HttpEntity entity1 = response1.getEntity();
        EntityUtils.consume(entity1);
    }
}
Run Code Online (Sandbox Code Playgroud)

它打印出来的结果是这样的:

try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
    HttpGet httpGet = new HttpGet("http://www.website.com");
    try (CloseableHttpResponse response1 = httpclient.execute(httpGet)) {
        System.out.println(response1.getStatusLine());
        HttpEntity entity1 = response1.getEntity();
        EntityUtils.consume(entity1);
    }
}
Run Code Online (Sandbox Code Playgroud)

我期待200

HTTP/1.1 419 status code 419
Run Code Online (Sandbox Code Playgroud)

当我将网站更改为谷歌或其他网站时,我得到了这一点。

ruh*_*hul 3

我通过 HttpClient 库以及 POSTMAN 发出 get 请求,并面临相同的 419 错误。为了解决这个 419 错误,我们需要csrf在提交表单时添加令牌。

但是,如果您仍然想知道如何查找csrf令牌,即使您发出GET请求并面临状态419。就我而言,我通过在 header 中添加令牌解决了问题user-agent: xxxx

例子:

user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36
Run Code Online (Sandbox Code Playgroud)

Http客户端代码:

  connectionManager = new PoolingHttpClientConnectionManager();
  ...
  ...
  ...

  httpClient = HttpClients.custom()
                .setConnectionManager(connectionManager)
                .setRedirectStrategy(new LaxRedirectStrategy())
                .setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36")
                .build();
Run Code Online (Sandbox Code Playgroud)