我尝试使用 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/