2017-11-29 4 views
2

私の目標は、Google Analyticsのコールが、今私はちょうどヤフーをヒットしようとしているため(自分のアプリケーションに特定のリクエストを送信するときにトリガされていることを確認するためにBMPを使用することです.comとリクエストしてください)。好ましくは、フロントエンド(つまりセレンを使用)を経由せずにこれを実行したいと考えています。BrowserMobプロキシ+ ApacheのHttpClientを:受信javax.net.ssl.SSLHandshakeException

私のJavaコードは次のような次のとおりです。

> javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) 
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949) 
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302) 
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296) 
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1509) 
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216) 
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979) 
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:914) 
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062) 
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) 
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:275) 
    at org.apache.http.impl.conn.HttpClientConnectionOperator.upgrade(HttpClientConnectionOperator.java:169) 
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.upgrade(PoolingHttpClientConnectionManager.java:333) 
    at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:398) 
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:219) 
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195) 
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86) 
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108) 
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:115) 
    at com.foo.www.analytics_testing.browserMob_Proxy.runTest(browserMob_Proxy.java:60) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387) 
    at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292) 
    at sun.security.validator.Validator.validate(Validator.java:260) 
    at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324) 
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229) 
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124) 
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1491) 
    ... 41 more 
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) 
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) 
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) 
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382) 
    ... 47 more 

どのように私はこのエラーを解決することができますにリクエスト結果を送信

import net.lightbody.bmp.BrowserMobProxy; 
import net.lightbody.bmp.BrowserMobProxyServer; 
import net.lightbody.bmp.client.ClientUtil; 
import net.lightbody.bmp.core.har.Har; 
import net.lightbody.bmp.core.har.HarEntry; 
import net.lightbody.bmp.proxy.CaptureType; 

import java.io.IOException; 
import java.net.Inet4Address; 
import java.net.URI; 
import java.net.URISyntaxException; 
import java.util.List; 

import org.apache.http.HttpHost; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.config.RequestConfig; 
import org.apache.http.client.methods.CloseableHttpResponse; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.CloseableHttpClient; 
import org.apache.http.impl.client.HttpClients; 
import org.apache.http.util.EntityUtils; 

import org.junit.Test; 

public class browserMob_Proxy { 


@Test 
public void runTest() throws ClientProtocolException, IOException, URISyntaxException, InterruptedException{ 

    // start the proxy 
    BrowserMobProxy browserMobProxy = new BrowserMobProxyServer(); 
    //browserMobProxy.setTrustAllServers(true); 
    Thread.sleep(10000); 
    browserMobProxy.start(0); 
    int port = browserMobProxy.getPort(); // get the JVM-assigned port 



    CloseableHttpClient httpclient = HttpClients.createDefault(); 
    try { 
     String hostIp = Inet4Address.getLocalHost().getHostAddress(); 
     HttpHost proxy = new HttpHost(hostIp, port, "http");   
     HttpHost target = new HttpHost("google.com", 443, "https"); 

     RequestConfig config = RequestConfig.custom().setProxy(proxy).build(); 
     HttpGet request = new HttpGet("/"); 
     request.setConfig(config); 

     System.out.println("Executing request " + request.getRequestLine() + " to " + target + " via " + proxy); 

     CloseableHttpResponse response = httpclient.execute(target, request); 
     try { 
      System.out.println("----------------------------------------"); 
      System.out.println(response.getStatusLine()); 
      EntityUtils.consume(response.getEntity()); 
     } finally { 
      response.close(); 
     } 
    } 
    finally { 
     httpclient.close(); 
    } 

    browserMobProxy.stop(); 
} 

}

+0

に戻って取得するときに、あなたは、HTTPオブジェクトを使用しようとしている実感ワーキングサンプルをスピンアップができますが、そのサイトがHTTPS メッセージを使用していると言います接続を証明する証明書を見つけられないというhttps接続があるかどうかは、証明書がないかどうかに関係なく、すべてを信頼するように指定しているため無視されます。私は確信していません – Sentinel

+0

"https接続が接続のためのあなたのcertsを見つけることができません" - 私は、browserMobProxy.setTrustAllServers(true)は証明書のチェックを無視するようになっているという印象を受けています。右?しかし、私はその行を使用するかどうかにかかわらず、私はまだ同じエラーが発生します。その行が想定していたことをしていないと思う、あるいは私はそれが何をしているのか誤解しています(おそらく、私はこの分野で初めてです)。 – user1599401

+0

https接続を指定しています "HttpHost target = new HttpHost(" yahoo.com "、443、" https ");" httpsには何らかの認証が必要なため、そのセキュリティレベルなしでhttps接続を使用することはできません – Sentinel

答えて

0

サイトから読み取る取得したい場合は、単にサイトにアクセスしようとしている場合は、この線に沿ってより多くの何かが

CloseableHttpClient httpClient = HttpClients.createDefault(); 
URL url = new URL("http://yahoo.com"); 
URLConnection connection = url.openConnection(); 

を理解する方が簡単かもしれませんそして、その後、もう少しコードがあります私は、私は、これはBMPを使用していません注意してくださいよ、あなたが

を求めている正確にわからないんだけど、あなたはBMPを使用しようとしている理由は?

あなたはより詳細な情報を提供できる場合、私は試すことができますし、私は自分のコンピュータ

+0

私の目標は、Googleアナリティクスの呼び出しがオフに解雇されていることを確認するためにBMPを使用することです私のウェブサイトに特定のリクエストを送信することによって自動的に発生します。私はHTTPリクエストを送信し、HARをキャプチャし、GAコールが私のウェブサイトへの私の元々の要求の結果として配置されたことを検証することが、私にはうまくいくと思います。だから私はGAがHARを呼び出すことを期待しています。最善のアプローチは、セレンを使用することであろうかのよう – user1599401

+0

それをできるだけ正確に再現可能になるようにあなたが取り残さ任意のコードを追加してくださいあなたはそうすることに非常に反対しているがあれば、私は の上にあなたのコードを試してみて、トラブルシューティングを行うことができ、そうです – Sentinel

+0

元の投稿を編集してコード全体を追加しました – user1599401

関連する問題