0

私はクローラー4jを使用してgrailsアプリを開発しています。

これは古い質問であり、このソリューション hereに出会いました。

提供された解決策を試しましたが、別のフェッチャーと mockssl Java ファイルをどこに保管すればよいかわかりません。

また、https://... を含む URL の場合、これら 2 つのクラスがどのように呼び出されるのかわかりません。

前もって感謝します。

4

1 に答える 1

0

ソリューションは正常に機能します。コードを配置する場所を推測するのに問題があるかもしれません。これが私がそれを使用する方法です:

クローラーを作成すると、公式ドキュメントに示されているように、メインクラスに次のようなものがあります。

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;
    }
};

}

ご覧のとおり、私は公式ドキュメントとあなたが投稿したリンクからコードをコピーしているだけですが、すべてを一緒に見ることがより明確になることを願っています.

于 2014-08-13T11:39:06.590 に答える