我试图解析一个特定的网站,当我的java代码调用它时,我得到了一个HTTP响应代码419。我需要解析响应来查找内容,但我被响应代码卡住了。
我试过用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);
}
}
它输出的结果如下:
HTTP/1.1 419 status code 419
我在等200美元
HTTP/1.1 200 OK
当我把网站改成谷歌或其他网站时,我就会得到这个结果。
2条答案
按热度按时间4dbbbstv1#
我正在通过HttpClient库以及从POSTMAN发出获取请求,并面临相同的419错误。要解决此419错误,我们需要在提交表单时添加
csrf
令牌。然而,如果您仍然想知道如何找到
csrf
令牌,即使您正在发出GET请求并面临状态419,在我的情况下,我通过在标题中添加user-agent: xxxx
令牌解决了这个问题。示例:
HttpClient代码:
c3frrgcw2#
如果你从任何浏览器点击网站网址,那么你可以很容易地获得内容,但当你从 Postman 或从你的代码点击网址,那么它说的状态代码419,这实际上意味着它需要一个csrf令牌。但是浏览器如何获得内容呢?这是因为你试图点击的网站是以这样一种方式配置的,当它从浏览器只得到请求,然后它会呈现结果.当浏览器点击http请求时,它会发送一个名为“user-agent”的参数,并在其中发送一些信息。例如-
因此,如果我们可以从我们的java代码(如下)伪造http调用,就像从浏览器发送一样,那么它将不再给予419状态。
p.s-此处使用apache httpclient,请确保将依赖项添加到pom.xml