Bene, ho cercato di utilizzare il proxy SOCKS su Android. Troppo sono faticato e non sono riuscito a usarlo correttamente.Come utilizzare HttpURLConnection su proxy SOCKS su Android
Fondamentalmente voglio ottenere un contenuto di una pagina su un proxy SOCKS utilizzando HttpURLConnection
(è un must).
Il codice che sto usando è questo:
String proxyHost = "192.168.2.2";
int proxyPort = 1999;
InetSocketAddress proxyAddr = new InetSocketAddress(proxyHost, proxyPort);
Proxy proxy = new Proxy(Proxy.Type.SOCKS, proxyAddr);
URL request = new URL("http://requestb.in/sgjga5sg");
HttpURLConnection urlConnection = (HttpURLConnection) request.openConnection(proxy);
urlConnection.setDoInput(true);
urlConnection.setConnectTimeout(36000);
urlConnection.setReadTimeout(44000);
InputStream is = urlConnection.getInputStream();
for (int x = is.read(); x >= 0; x = is.read()) {
System.out.print((char) x);
}
System.out.println();
io capisco SocketTimeOutException
, qui è l'analisi dello stack:
java.net.SocketTimeoutException
at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:37)
at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237)
at java.net.PlainSocketImpl.socksReadReply(PlainSocketImpl.java:440)
at java.net.PlainSocketImpl.socksRequestConnection(PlainSocketImpl.java:340)
at java.net.PlainSocketImpl.socksConnect(PlainSocketImpl.java:326)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:181)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:456)
at java.net.Socket.connect(Socket.java:887)
at com.android.okhttp.internal.Platform.connectSocket(Platform.java:174)
at com.android.okhttp.Connection.connect(Connection.java:152)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:382)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:332)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:199)
at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:25)
at com.guness.testsocks.MainActivity.doTheThing(MainActivity.java:81)
Alcune cose curiose:
- I punti del proxy al mio tunnel SSH (apparentemente testato su altri dispositivi che utilizzano la funzione proxy firefox socks).
- Quando cambio
Proxy.Type
inHTTP
e scelgo un HttpProxy appropriato da internet funziona, ma ho bisogno di calze. - Non importa
System.out.print
e il ciclo, è lì per scopo di test. - dispositivo di prova è un modello C6603 e la versione Android 5.1.1
Edit: Sembra che proxy SOCKS non funziona con HttpURLConnection
su android. Alcuni riferimenti: Questo thread e questo thread rivendicano così. Voglio essere sicuro che ci sia un modo senza usare le librerie di terze parti.
Si sta utilizzando okhttp. Questa è una libreria di terze parti. Non so quale versione della libreria stai usando, ma okhttp ha appena aggiunto il supporto SOCKS di recente. Hai provato a utilizzare la versione di 'HttpURLConnection' incorporata in Android? –
Beh, non sto usando okhttp da solo, il codice nativo 'HttpURLConnection' e' HttpsURLConnection' sono usati sul mio codice. forse Android internamente usando okhttp, non è sicuro. – guness
Io non la penso così. Su quale dispositivo stai provando? –