2016-03-24 23 views
5

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'u HTTP 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.

+1

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? –

+1

Eh, ben kendim okhttp kullanmıyorum, yerel 'HttpURLConnection' ve' HttpsURLConnection' kodumda kullanılır. belki android dahili okhttp kullanarak, emin değil. – guness

+0

Sanırım öyle değil. Hangi cihazı test ediyorsunuz? –

cevap

1

Sorunu ve çözümü kısmen buldum. Soruma göre, cihaz Lollipop(5.1.1) idi. Marshmallow(6.0)'u kontrol etmek için bir emülatör kullandığımda hiçbir değişiklik yapmadan çekicilik gibi çalışıyordu. Emulator denetimi de Lollipop için başarısız oluyor.

ileride başvurmak üzere Yani:

Android Marshmellow daha önceki cihazlarda çorap vekil doğal (using HURL) desteklememektedir.

İlgili konular