私はクローラー4jを使用してgrailsアプリを開発しています。
これは古い質問であり、このソリューション hereに出会いました。
提供された解決策を試しましたが、別のフェッチャーと mockssl Java ファイルをどこに保管すればよいかわかりません。
また、https://... を含む URL の場合、これら 2 つのクラスがどのように呼び出されるのかわかりません。
前もって感謝します。
私はクローラー4jを使用してgrailsアプリを開発しています。
これは古い質問であり、このソリューション hereに出会いました。
提供された解決策を試しましたが、別のフェッチャーと mockssl Java ファイルをどこに保管すればよいかわかりません。
また、https://... を含む URL の場合、これら 2 つのクラスがどのように呼び出されるのかわかりません。
前もって感謝します。
ソリューションは正常に機能します。コードを配置する場所を推測するのに問題があるかもしれません。これが私がそれを使用する方法です:
クローラーを作成すると、公式ドキュメントに示されているように、メインクラスに次のようなものがあります。
public class Controller {
public static void main(String[] args) throws Exception {
CrawlConfig config = new CrawlConfig();
config.setCrawlStorageFolder(crawlStorageFolder);
/*
* Instantiate the controller for this crawl.
*/
PageFetcher pageFetcher = new MockSSLSocketFactory(config);
RobotstxtConfig robotstxtConfig = new RobotstxtConfig();
RobotstxtServer robotstxtServer = new RobotstxtServer(robotstxtConfig, pageFetcher);
CrawlController controller = new CrawlController(config, pageFetcher, robotstxtServer);
....
ここでは、投稿したリンクに示されているように定義されている MockSSLSocketFactory を使用します。
public class MockSSLSocketFactory extends PageFetcher {
public MockSSLSocketFactory (CrawlConfig config) {
super(config);
if (config.isIncludeHttpsPages()) {
try {
httpClient.getConnectionManager().getSchemeRegistry().unregister("https");
httpClient.getConnectionManager().getSchemeRegistry()
.register(new Scheme("https", 443, new SimpleSSLSocketFactory()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
ご覧のとおり、ここではクラス SimpleSSLSocketFactory を使用しています。リンクの例に示すように定義できます。
public class SimpleSSLSocketFactory extends SSLSocketFactory {
public SimpleSSLSocketFactory() throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException,
UnrecoverableKeyException {
super(trustStrategy, hostnameVerifier);
}
private static final X509HostnameVerifier hostnameVerifier = new X509HostnameVerifier() {
@Override
public void verify(String host, SSLSocket ssl) throws IOException {
// Do nothing
}
@Override
public void verify(String host, String[] cns, String[] subjectAlts) throws SSLException {
// Do nothing
}
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
@Override
public void verify(String arg0, java.security.cert.X509Certificate arg1) throws SSLException {
// TODO Auto-generated method stub
}
};
private static final TrustStrategy trustStrategy = new TrustStrategy() {
@Override
public boolean isTrusted(java.security.cert.X509Certificate[] arg0, String arg1) throws CertificateException {
return true;
}
};
}
ご覧のとおり、私は公式ドキュメントとあなたが投稿したリンクからコードをコピーしているだけですが、すべてを一緒に見ることがより明確になることを願っています.