2016-08-12 41 views
15

Chcę proxy ruchu sieciowego dla emulatora Androida.com.android.volley.NoConnectionError - Emulator Androida z Charles Proxy

Nie mogę sprawić, żeby zadziałało.

Moja emulator jest uruchomiony przy użyciu to:

emulator @Nexus_5X_API_23 -http-proxy 10.0.1.17:8888 

punktów IP i port, co donosi Karola w menu Pomoc.

Certyfikat SSL jest zainstalowany. Mogę otworzyć przeglądarkę emulatora i Charles pokazuje mi cały ruch. Przeglądarka aktualizuje się jak zwykle.

Wszystko wydaje się jak dotąd dobre.

Teraz próbuję uruchomić moją aplikację. Moje pierwsze połączenie sieciowe z powodzeniem przechodzi przez Charlesa. Odpowiedź wraca i Charles ją wyświetla. Jednak odpowiedź nie zostanie pomyślnie przekazana do aplikacji.

Ustawiłem punkt przerwania w wywołaniu błędu i widzę com.android.volley.NoConnectionError, które jest spowodowane przez java.io.IOException: unexpected end of stream on Connection.

Dlaczego Charles nie przekazuje poprawnie wyniku do aplikacji?

Czy muszę zrobić to, co zdefiniowano pod numerem 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); 

To nie wydaje się poprawne - czego mi brakuje?

+0

Mówisz o certyfikacie SSL ... Czy Twój jeden proxy SSL? Czy próbujesz połączyć się z witryną chronioną protokołem SSL? – Jehy

+0

Jeśli chcesz monitorować ruch w https, sugeruję użycie Fiddlera, co jest wygodniejsze pod tym względem. – suitianshi

+0

jakiego używasz HttpStack? spróbuj dodać -verbose-proxy podczas uruchamiania emulatora i dodaj do pytania wyjście – djodjo

Odpowiedz

-1

Jedynym sposobem na to jest zainstalowanie certyfikatu SSL (Secure Socket Layer) na końcu serwera, bez konieczności ustawiania żadnego proxy Charles.

Każde przedsiębiorstwo posiada dwa środowiska programistyczne,

  1. Rozwoju (http): nie wymaga certyfikatu SSL
  2. Produkcja (https): wymaga certyfikatu SSL

Kiedy instaluje środowisku produkcyjnym następnie certyfikat SSL, a następnie emulator Androida, a biblioteka Volley automatycznie wykrywa połączenie sieciowe i może korzystać z usług apis/web zgodnie z oczekiwaniami.

Żadne inne rozwiązanie tego problemu.

2

W celu ułatwienia rozwiązywania

java.io.IOException: nieoczekiwany koniec strumienia na Connection

problem Proszę odpowiedzieć na pytania w komentarzach.

W odniesieniu do

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

to ci nie pomoże. W rzeczywistości jest to inny sposób na zastosowanie proxy, które IMO jest nawet lepsze niż "-http-proxy", ponieważ można go zastosować w dowolnym miejscu nie tylko dla emulatora i tylko dla tej aplikacji.

Musisz zastosować proxy w stosie Http, którego używasz. na przykład:

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

a następnie do debugowania zbudować można użyć smth jak:

requestQueue = Volley.newRequestQueue(context, new ProxyHurlStack()); 
Powiązane problemy