2016-08-12 2 views
15

Android 에뮬레이터의 네트워크 트래픽을 프록시하고 싶습니다.com.android.volley.NoConnectionError - Charles 프록시가있는 Android 에뮬레이터

나는 작동하지 않을 것 같습니다.

내 에뮬레이터는이를 사용하여 부팅 :

emulator @Nexus_5X_API_23 -http-proxy 10.0.1.17:8888 

IP와 포트 포인트를 찰스 도움말 메뉴에서보고 무엇을.

SSL 인증서가 설치되어 있습니다. 에뮬레이터 브라우저를 열면 Charles가 나에게 모든 트래픽을 보여줍니다. 평소와 같이 브라우저가 업데이트됩니다.

모두 좋아 보인다.

이제 앱을 실행하려고합니다. 첫 번째 네트워크 호출은 Charles를 통해 성공적으로 종료됩니다. 응답은 돌려 보내고 찰리는 그것을 표시한다. 그러나 응답이 성공적으로 응용 프로그램에 전달되지 않습니다.

오류 콜백에 중단 점을 설정했으며 java.io.IOException: unexpected end of stream on Connection에 의해 발생하는 com.android.volley.NoConnectionError을 볼 수 있습니다.

왜 Charles가 결과를 다시 앱으로 올바르게 전달하지 않습니까?

the end of the configuration page on Charles에 정의 된 것을 수행해야합니까?

HttpHost httpproxy = new HttpHost("192.168.0.101", 8888, "http"); 
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,httpproxy); 

이것은 올바르지 않은 것 같습니다. 무엇이 누락 되었습니까?

+0

당신은 SSL 인증서에 대해 얘기인가? 아니면 SSL로 보호 된 웹 사이트에 연결하려고합니까? – Jehy

+0

https 트래픽을 모니터링하려면 Fiddler를 사용하는 것이 좋습니다.이 점에서 더 편리합니다. – suitianshi

+0

HttpStack은 무엇을 사용합니까? 에뮬레이터를 시작할 때 -verbose-proxy를 추가하고 질문에 출력을 추가하십시오. – djodjo

답변

-1

유일한 방법은 서버 끝에 SSL (Secure Socket Layer) 인증서를 설치 한 다음 Charles 프록시를 설정할 필요가 없다는 것입니다. 모든 SSL 인증서를 필요로하지 않는다

  • 생산이 (HTTPS)이 : SSL 인증서를
  • 생산 환경을 설치합니다 필요

    모든 기업은

    1. 개발 (HTTP)가

      두 개발 환경을 가지고 있습니다 SSL 인증서를 누른 다음 안드로이드 에뮬레이터와 발리 라이브러리가 자동으로 네트워크 연결을 감지하고 예상대로 apis/웹 서비스를 사용할 수있게되었습니다.

      이 문제에 대한 다른 해결책이 없습니다. 연결에 스트림의 예기치 않은 끝이

      문제 의견의 질문에 대답하십시오

      때 java.io.IOException를 해결하는 데 도움이하기 위해

    2

    .

    에 관하여

    HttpHost에서 httpProxy = 새로운 HttpHost ("192.168.0.101", 8888, "HTTP"); httpClient.getParams(). setParameter (ConnRoutePNames.DEFAULT_PROXY, httpproxy);

    이렇게하면 도움이되지 않습니다. 사실이 방법은 IMO가 '-http-proxy'보다 낫다는 프록시를 적용하는 또 다른 방법입니다. 왜냐하면 여러분은 에뮬레이터뿐만 아니라이 앱을 빌드 할 때만 어디서나 적용 할 수 있기 때문입니다.

    사용중인 Http Stack에서 프록시를 적용해야합니다. 예를 들면 :

    public class ProxyHurlStack extends HurlStack { 
    
        @Override 
        protected HttpURLConnection createConnection(URL url) throws IOException { 
         Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("10.0.1.17", 8888)); 
         HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy); 
         return conn; 
        } 
    } 
    

    다음에 당신은 당신이 같은 떨어지게을 사용할 수 있습니다 구축 디버깅 : 프록시 SSL 하나는 ...

    requestQueue = Volley.newRequestQueue(context, new ProxyHurlStack());