webmagic在tomcat上https报错问题

我是直接把process中的page.getHtml()替换为我自己得到的

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Html;

public class TestWebMagic implements PageProcessor{
	private static Html html;
	private static String baseUrl;
	
	@Override
	public void process(Page page) {
		//https协议得到页面html
		html = new Html(getHtmlByHttps(baseUrl, "UTF-8"));
		System.out.println(html);
		page.putField("imgs", html.$("img", "src-medium").regex(".*800x800.jpg.*").all());
	}

	@Override
	public Site getSite() {
		return Site.me().setRetryTimes(3).setSleepTime(1000);
	}
	
    public static String getHtmlByHttps(String u, String encoding){
    	try {
    		
    		SSLContext sc = SSLContext.getInstance("SSL", "SunJSSE");
    		sc.init(null, new TrustManager[] { new X509TrustManager() {  
    	        @Override  
    	        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    	        	
    	        }  

    	        @Override  
    	        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    	        	
    	        }  

    	        @Override  
    	        public X509Certificate[] getAcceptedIssuers() {  
    	            return null;  
    	        }  
    	    } }, new SecureRandom());
    		HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());  
    	    HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {  
    	        @Override  
    	        public boolean verify(String arg0, SSLSession arg1) {  
    	            return true;  
    	        }  
    	    });
    	    
    	    SSLSocketFactory ssf = sc.getSocketFactory();
    	    URL url = new URL(null, u, new sun.net.www.protocol.https.Handler());
    	    HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
    	    conn.setSSLSocketFactory(ssf);
    	    conn.setDoOutput(true);  
    	    conn.setDoInput(true);
    	    conn.setUseCaches(false);
    	    conn.setRequestMethod("GET");
    	    conn.connect();  
    	    BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), encoding));
    	    StringBuffer sb = new StringBuffer();
    	    String line;  
    	    while ((line = br.readLine()) != null)  
    	        sb.append(line);  
    	    return sb.toString();
    	} catch (Exception e) {  
    	    e.printStackTrace();  
    	}  
    	return null;
    }
	
	public static void main(String[] args) {
		baseUrl = "https://product.suning.com/0070137013/149868717.html";
		// 创建默认的httpClient实例
        Spider.create(new TestWebMagic())
                .addUrl("http://fanyi.baidu.com")//随便写个html协议可以得到的链接
                //启动爬虫
                .run();
    }

}

### 回答1: 问题描述:在Tomcat配置https后出现了404错误。 回答:可能原因是在Tomcathttps配置中出现了错误。建议仔细检查证书和配置文件等是否正确,并且查看Tomcat日志文件以了解更详细的错误信息。 ### 回答2: 在进行 Tomcat 配置 HTTPS 时,报错 404 可能有多个原因。下面提供一些可能的解决方案: 1. 检查 SSL 证书是否正确 在使用 HTTPS 时,需要使用 SSL 证书来进行加密通信。如果证书不正确或者过期,Tomcat 就无法正确识别 HTTPS 的请求,从而导致 404 报错。在这种情况下,需要检查 SSL 证书是否正确,并重新生成证书或更新证书。同时,还需要检查证书是否已经安装到 Tomcat 的 keystore 中。 2. 检查 Tomcat 配置是否正确 在使用 HTTPS 时,还需要正确配置 Tomcat 的 server.xml 文件。可以检查配置是否正确,或者使用 Tomcat 的默认配置文件进行测试。如果配置错误,可能会导致 Tomcat 无法接收 HTTPS 请求,从而出现 404 报错。需要检查以下几个方面: (1) Connector 参数是否正确:需要检查 SSL 协议版本、端口、密钥库、证书等参数是否正确配置。 (2) SSLHostConfig 参数是否正确:需要检查对应的 host 和域名是否正确配置。 (3) Context 参数是否正确:如果是在 Web 应用中使用 HTTPS,需要在 Context 中添加正确的安全传输参数。 3. 检查防火墙设置是否正确 如果 Tomcat 安装在防火墙后面,需要正确配置防火墙允许 HTTPS 的访问。如果防火墙配置错误,可能会导致 HTTPS 请求无法正确到达 Tomcat,从而出现 404 报错。需要检查防火墙的设置,确保 HTTPS 请求可以到达 Tomcat。 4. 检查域名解析是否正确 如果使用域名进行 HTTPS 访问,需要确保域名解析正确。如果域名解析错误,可能会导致 HTTPS 请求无法正确到达 Tomcat,从而出现 404 报错。需要检查域名解析的设置,确保可以正确解析到 Tomcat 对应的 IP 地址。 总之,在出现 HTTPS 报错 404 时,需要逐一排查以上可能的原因,并进行相应的解决方案。同时,可以查看 Tomcat 的日志文件,以了解更多的错误信息,从而更快地找到问题所在。 ### 回答3: Tomcat是一个常用的Java Web服务器,支持通过HTTPS进行安全通信。但是,在配置TomcatHTTPS时,有可能会出现404错误的情况。造成这种错误的原因有很多,可能是证书配置问题Tomcat本身的配置问题、网络问题等。下面,我们将分别从这些方面来探讨如何解决Tomcat配置HTTPS报错404的问题。 1. 证书配置问题 HTTPS可以通过SSL证书来实现安全通信。因此,证书的配置是否正确是影响HTTPS是否可以正常工作的关键因素之一。通常,我们需要为Tomcat生成一个自签名证书来使用HTTPS。如果证书的生成或配置不正确,可能会导致Tomcat无法正常工作。 解决方法:检查证书的生成和配置是否正确。可以尝试重新生成证书或者使用已有的可信证书来进行配置。 2. Tomcat本身的配置问题 Tomcat在配置HTTPS时,需要对服务器本身和应用程序进行相应的配置。如果Tomcat的配置不正确或者与应用程序不匹配,也会导致HTTPS无法正常工作。 解决方法:检查Tomcat的配置是否正确,确保与应用程序相匹配。可以尝试重新配置Tomcat或者调整应用程序的配置。 3. 网络问题 HTTPS的工作方式需要通过SSL/TLS协议来保证数据的安全性,同时也要求网络环境具备一定的条件。如果网络环境不稳定或者存在防火墙等限制,也会导致HTTPS无法正常工作。 解决方法:检查网络环境是否符合要求,确保网络稳定且没有被限制。如果需要,可以对网络进行相应的配置。 总之,Tomcat配置HTTPS报错404的问题可能会涉及多个方面,需要仔细排查。可以依据上述解决方法进行相应的调整和修复,确保Tomcat可以正常使用HTTPS进行安全通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值