java - 使用jsoup解析https(java)

标签 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 中出现异常:获取 URL 时出现 HTTP 错误。状态 = 403,URL = https://www.somesite.com/ 在 org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:590) 在 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 正在运行。

最佳答案

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

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

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

(如果没有真实的示例 URL,人们将无法为您提供更多帮助,因为我们无法仅凭此信息判断服务器在做什么。)

关于java - 使用jsoup解析https(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40223980/

相关文章:

在主域下注册的 SSL,我们可以用于子域吗?

java - Spring mvc、hibernate将实体转换为dto时出现LazyInitializationException

java - 检查 null @autowired 字段,并手动初始化它

python - 如何打开读写文件并重新创建文件?

Javascript Regex - 将结构化字符串解析为带有替换的对象

php - 带属性的正则表达式

python - 在 key /证书不匹配的情况下测试 TLS 证书身份验证

java - 带有 tomcat 服务器的自签名证书的 TLS - 无法加载 PEM 客户端证书

java - 使用 BIRT 的多页文本报告

java - 如何在 J2ME 中设置警报而不是显示未处理的异常?