Eh, android üzerinde SOCKS proxy kullanmaya çalışıyorum. Çok fazla zorlanıyorum ve doğru şekilde kullanamadım.Android'de SOCKS proxy üzerinden HttpURLConnection nasıl kullanılır
Temel olarak, bir sayfanın içeriğini HttpURLConnection
kullanarak bir SOCKS proxy üzerinden almak istiyorum (bir zorunluluktur).
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)
Bazı meraklı şeyler:
- vekil noktaları
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();
ben
SocketTimeOutException
olsun, burada Yığın izleme:kullanıyorum kod budur SSH tünelime (firefox çorap proxy özelliğini kullanarak diğer cihazlarda test edildi).
Proxy.Type
'uHTTP
olarak değiştirdiğimde ve uygun bir HttpProxy kullanıldığında çalışır, ancak çoraplara ihtiyacım var.System.out.print
ve döngüsünü sakın unutma, test amaçlıdır.- Testi cihazı bir C6603 modeli ve Android sürümü 5.1.1
Düzenleme: Bu SOCKS proxy robot üzerinde HttpURLConnection
ile çalışmıyor gibi görünüyor. Bazı referanslar: Bu thread ve bu thread iddia ediyor. 3. parti kütüphaneleri kullanmadan bir yol olup olmadığından emin olmak istiyorum.
Eğer okhttp kullanıyorsunuz. Bu 3. parti kütüphanesi. Kullandığınız kitaplığın hangi sürümünü bilmiyorum, ancak okhttp kısa süre önce SOCKS desteğini ekledi. Android'de yerleşik olan "HttpURLConnection" sürümünü kullanmayı denediniz mi? –
Eh, ben kendim okhttp kullanmıyorum, yerel 'HttpURLConnection' ve' HttpsURLConnection' kodumda kullanılır. belki android dahili okhttp kullanarak, emin değil. – guness
Sanırım öyle değil. Hangi cihazı test ediyorsunuz? –