COM.Android.volley.NoConnectionError-émulateur Android avec Proxy Charles

je veux du trafic réseau proxy pour un émulateur Android.

je n'arrive pas à le faire fonctionner.

Mon émulateur est démarré à l'aide de ceci:

emulator @Nexus_5X_API_23 -http-proxy 10.0.1.17:8888

L'IP et le port pointent vers ce que Charles rapporte dans le menu D'aide.

le certificat SSL est installé. Je peux ouvrir le navigateur de l'émulateur et Charles me montre tout le trafic. Le navigateur met à jour comme d'habitude.

Tout semble bon jusqu'ici.

maintenant j'essaie d'exécuter mon App. Mon premier appel passe avec succès par Charles. La réponse revient et Charles l'affiche. Toutefois, la réponse n'est pas transmis à l'application avec succès.

j'ai défini un point de rupture dans le rappel d'erreur et je peux voir un com.android.volley.NoConnectionError qui est causée par java.io.IOException: unexpected end of stream on Connection.

pourquoi Charles ne renvoie-t-il pas correctement le résultat à l'application?

j'ai besoin de faire ce qui est défini à la fin de la page de configuration sur Charles?

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

cela ne semble pas correct - qu'est-ce que je manque?

15
demandé sur Brad 2016-08-12 19:10:41

2 réponses

afin d'aider à résoudre

java.io.IOException: fin inattendue du flux sur la connexion

problème, veuillez répondre aux questions dans les commentaires.

en ce qui concerne

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

il ne vous aidera pas juste comme ça. En fait, c'est une autre façon pour appliquer un proxy qui OMI est encore mieux que "- http-proxy', parce que vous pouvez appliquer n'importe où, non seulement pour un émulateur, et c'est uniquement pour cette application construire.

vous devez appliquer le proxy dans la pile Http que vous utilisez. par exemple:

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

et puis pour vous déboguer build vous pouvez utiliser smth comme:

requestQueue = Volley.newRequestQueue(context, new ProxyHurlStack());
2
répondu djodjo 2016-08-21 20:23:43

la seule façon d'y arriver est d'installer le certificat SSL (Secure Socket Layer) à la fin du serveur, alors pas besoin de définir un mandataire Charles.

chaque entreprise a deux environnements de développement,

  1. développement (http ): n'a pas besoin de certificat SSL
  2. Production ( https ): nécessite un certificat SSL

lorsque l'environnement de production installe le certificat SSL, l'émulateur android et la bibliothèque Volley détectent automatiquement connexion réseau et votre ont été en mesure de consommer les services apis/web comme prévu.

aucune autre solution à ce problème.

-1
répondu Dnyanesh 2016-08-19 16:25:52