2017-10-20 10 views
0

私はJAVAクローラを作成し、proxyを使用して、https certificationを無視しようとしました。InternalHttpClient.getParams()とUnsupportedOperationExceptionの比較

しかし、それは、私はほとんど言うのソリューションを検索

(org.apache.http.impl.client.InternalHttpClient.getParamsで)java.lang.UnsupportedOperationExceptionが

では動作しません。私のHttpClientのバージョンは古いですが、私はApache Webサイトから最新のバージョンに更新しますが、この例外はまだ発生しました。

public static void main(String[] args) { 
    try{ 
     TrustManager[] trustAllCerts = new TrustManager[] { 
      new X509TrustManager() { 
       public X509Certificate[] getAcceptedIssuers() { 
         return null; 
        } 
       public void checkClientTrusted(X509Certificate[] certs, String authType) {} 
       public void checkServerTrusted(X509Certificate[] certs, String authType) {} 
       } 
     }; 
     SSLContext ctx = SSLContext.getInstance("TLS"); 
     ctx.init(null, trustAllCerts, null); 
     LayeredConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(ctx); 
     CloseableHttpClient client = HttpClients.custom().setSSLSocketFactory(sslSocketFactory).build();    
     HttpHost proxy = new HttpHost("127.0.0.1", 8888,"http"); 
     client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy); 
     HttpGet request = new HttpGet("https://www.javaworld.com.tw/jute/post/view?bid=29&id=312144"); 
     CloseableHttpResponse response = client.execute(request); 
     String entity = EntityUtils.toString(response.getEntity(), "utf-8"); 
     System.out.println(entity); 
    }catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

おかげで任意のソリューションのためにたくさん:

続くコードは、私のクローラコードです。

答えて

0

私は同じ問題を抱えていました。このメソッドは非推奨であり、最新のバージョンでは使用できなかったためです。

私は以下のコードを試してみました、それが私のためにあなたのソリューションのための

 public static HttpClient createClient() { 
     try { 
      SSLContextBuilder builder = new SSLContextBuilder(); 
      builder.useProtocol("TLSv1.2"); 
      builder.loadTrustMaterial(null, new TrustStrategy() { 
       @Override 
       public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { 
        return true; 
       } 
      }); 
      SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
        builder.build()); 

      HttpClientBuilder hcBuilder = HttpClients.custom(); 
      HttpHost httpProxy = new HttpHost(bundle.getString("PROXY_HOST"), Integer.parseInt(bundle.getString("PROXY_PORT"))); 
      DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(httpProxy); 
      hcBuilder.setRoutePlanner(routePlanner); 

      CloseableHttpClient httpclient = hcBuilder 
        .setSSLSocketFactory(sslsf).build(); 

      return httpclient; 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 
+0

感謝を働きました。すみません、新しいSSLConnectionSocketFactory( builder.build())の 'builder'とbundle.getString( "PROXY_HOST")の 'bundle'はどういう意味ですか? – Akira

+0

完全なメソッドを含めるようにコードを更新しました。これは助けになるはずです。 – Clement

関連する問題