java抓取https网页爬虫,解决Server returned HTTP response code: 403 for URL报错
java抓取https网页爬虫,解决Server returned HTTP response code: 403 for URL报错
关键是在忽略https的地方加上:connection.setRequestProperty("User-Agent", "Mozilla/4.76");
注意:需要加在new BufferedReader 前面才行,否则无效。
HttpsURLConnection.setDefaultHostnameVerifier(hv); connection = (HttpURLConnection) validationUrl.openConnection(); //first set User-Agent to solve Server returned HTTP response code: 403 for URL connection.setRequestProperty("User-Agent", "Mozilla/4.76"); final BufferedReader in = new BufferedReader(new InputStreamReader( connection.getInputStream()));
抓取的地方先调用忽略https的代码
//先调用下忽略https证书的再请求才可以 HttpsUrlValidator.retrieveResponseFromServer(url); doc = Jsoup .connect(url) .header("User-Agent",rand_agents)
完整的HttpsUrlValidator.java代码如下:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLSession; public class HttpsUrlValidator { static HostnameVerifier hv = new HostnameVerifier() { public boolean verify(String urlHostName, SSLSession session) { System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost()); return true; } }; public final static String retrieveResponseFromServer(final String url) { HttpURLConnection connection = null; try { URL validationUrl = new URL(url); trustAllHttpsCertificates(); HttpsURLConnection.setDefaultHostnameVerifier(hv); connection = (HttpURLConnection) validationUrl.openConnection(); //first set User-Agent to solve Server returned HTTP response code: 403 for URL connection.setRequestProperty("User-Agent", "Mozilla/4.76"); final BufferedReader in = new BufferedReader(new InputStreamReader( connection.getInputStream())); String line; final StringBuffer stringBuffer = new StringBuffer(255); synchronized (stringBuffer) { while ((line = in.readLine()) != null) { stringBuffer.append(line); stringBuffer.append("\n"); } return stringBuffer.toString(); } } catch (final IOException e) { System.out.println(e.getMessage()); return null; } catch (final Exception e1){ System.out.println(e1.getMessage()); return null; }finally { if (connection != null) { connection.disconnect(); } } } public static void trustAllHttpsCertificates() throws Exception { javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1]; javax.net.ssl.TrustManager tm = new miTM(); trustAllCerts[0] = tm; javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext .getInstance("SSL"); sc.init(null, trustAllCerts, null); javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc .getSocketFactory()); } static class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public boolean isServerTrusted( java.security.cert.X509Certificate[] certs) { return true; } public boolean isClientTrusted( java.security.cert.X509Certificate[] certs) { return true; } public void checkServerTrusted( java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException { return; } public void checkClientTrusted( java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException { return; } } }
大自然,飘然的风,QQ群: python技术交流群:453879716,人工智能深度学习群:251088643
golang技术交流群:316397059,vuejs技术交流群:458915921 囤币一族:621258209,有兴趣的可以加入
微信公众号: 心禅道(xinchandao)投资论道
golang技术交流群:316397059,vuejs技术交流群:458915921 囤币一族:621258209,有兴趣的可以加入
微信公众号: 心禅道(xinchandao)投资论道
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2020-10-21 中台设计概念
2017-10-21 Linux下java nohup 后台运行关闭后进程停止的原因,不挂断后台运行命令
2016-10-21 VMware中安装CentOS7网络配置静态IP地址,常用配置和工具安装