ksoap timeout behind proxy in android

2019-03-05 03:30发布

问题:

i tried the example from http://www.helloandroid.com/tutorials/using-ksoap2-android-and-parsing-output-data to get request and response from a wsdl service. its working fine when i tried in a proxyless. but when i work behind proxy,i get "The operation timed out:request time failed: java.net.SocketException" is there any way to set proxy to SoapObject or Soap Envelop?

回答1:

Ksoap does not work behind a proxy. inorder to make that working.. download the HttpTransportSE.java and ServiceConnectionSE.java from sourceforge.

Create a package with HttpTransportSE and ServiceConnectionSE.

In ServiceConnectionSE constructor:

 String myProxy=android.net.Proxy.getDefaultHost() ;
            int myPort=android.net.Proxy.getDefaultPort();

            if(myProxy!=null){
                Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(myProxy, myPort));
                connection = (HttpURLConnection) new URL(url).openConnection(proxy);
            }
            else
            {
                connection = (HttpURLConnection) new URL(url).openConnection();
            }

now wherever we call HttpTransportSE.call()method make sure that it points to ur own package which has this two files.



回答2:

  Hi Everyone , The latest version of KSOAP2.6.5 [Tested it and verified it] has fix for the proxy authentication issue . The HTTPTransportSE constructor now accepts java.net.Proxy instance as a parameter along with URL. The method will be like
            HttpTransportSE httpTransport=new HttpTransportSE(proxy,URL);
  If your proxy is configured and if it requires authentication then use Authenticator class to setup your proxy credentials and have success. HTH , if not write me back



回答3:

As far as I know you have to set up the proxy in android operating system settings themselves and it will work fine.



回答4:

Replace with this..

//Timeout in milliseconds

int timeout=60000;
AndroidHttpTransport androidHttpTransport=new AndroidHttpTransport(url, timeout);