使用jsoup解析https(java)

时间:2016-10-24 17:18:00

标签: java parsing https jsoup

我尝试使用jsoup(java)解析文档。这是我的java代码:

    package test;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class crawler{
  private static final int TIMEOUT_IN_MS = 5000;

  public static void main(String[] args) throws MalformedURLException, IOException
  {
    Document doc = Jsoup.parse(new URL("http://www.internet.com/"), TIMEOUT_IN_MS);

    System.out.println(doc.html());
  }

}

好的,这很有效。但是,当我想解析https网站时,我收到此错误消息:

    Document doc = Jsoup.parse(new URL("https://www.somesite.com/"), TIMEOUT_IN_MS);

System.out.println(doc.html());

线程中的异常" main" org.jsoup.HttpStatusException:HTTP错误提取URL。状态= 403,网址= https://www.somesite.com/     at org.jsoup.helper.HttpConnection $ Response.execute(HttpConnection.java:590)     at org.jsoup.helper.HttpConnection $ Response.execute(HttpConnection.java:540)     在org.jsoup.helper.HttpConnection.execute(HttpConnection.java:227)     在org.jsoup.helper.HttpConnection.get(HttpConnection.java:216)     在org.jsoup.Jsoup.parse(Jsoup.java:183)     在test.crawler.main(crawler.java:14)

当我尝试解析https时,我只收到此错误消息。 http正在运作。

3 个答案:

答案 0 :(得分:1)

Jsoup很好地支持https - 它只是使用Java的URLConnection。

403服务器响应表明服务器已“禁止”该请求,通常是由于授权问题。如果您正在获取HTTP响应状态代码,则TLS(https)协商已有效。

这里的问题可能与HTTPS无关,只是您遇到麻烦的URL恰好是HTTPS。你需要理解为什么服务器给你一个403 - 我的猜测是你需要发送一些授权令牌(cookie或URL参数),或者由于用户代理而阻止了请求(默认为“Java”除非你指定它)。许多服务阻止了这种方式的请求。请将useragent设置为常用浏览器字符串。使用Jsoup.Connect方法来做到这一点。

(没有真正的示例网址,人们将无法为您提供更多帮助,因为我们无法通过此信息告诉服务器正在做什么。)

答案 1 :(得分:1)

您需要在点击URL时提供身份验证。如果请求在浏览器中工作而不使用JAVA代码,也请尝试403 Forbidden with Java but not web browser?中的解决方案。

答案 2 :(得分:0)

如果需要,您也可以忽略SSL证书

Jsoup.connect("https://example.com").validateTLSCertificates(false).get()