Did you add <uses-permission
android:name="android.permission.INTERNET" /> tag to your
AndroidManifest.xml?
The new SDK requires that permission for network calls.
sacoskun
On Aug 21, 6:13 pm, Graeme <[EMAIL PROTECTED]> wrote:
> Hi everyone
>
> I'm trying to figure out how to use HttpClient 4.x to do POST requests
> routed via
> a Proxy server. I'm seeing a socket exception triggered by calling
>
> DefaultHttpClient.execute(HttpHost target, HttpRequest method). My
> HttpPoster class looks like
>
> package com.bt.gcto.android.testhttp;
>
> import java.io.IOException;
> import java.util.Hashtable;
>
> import org.apache.http.Header;
> import org.apache.http.HttpEntity;
> import org.apache.http.HttpHost;
> import org.apache.http.HttpResponse;
> import org.apache.http.HttpVersion;
> import org.apache.http.client.HttpClient;
> import org.apache.http.client.methods.HttpPost;
> import org.apache.http.conn.ClientConnectionManager;
> import org.apache.http.conn.params.ConnRoutePNames;
> import org.apache.http.conn.scheme.PlainSocketFactory;
> import org.apache.http.conn.scheme.Scheme;
> import org.apache.http.conn.scheme.SchemeRegistry;
> import org.apache.http.conn.scheme.SocketFactory;
> import org.apache.http.conn.ssl.SSLSocketFactory;
> import org.apache.http.impl.client.DefaultHttpClient;
> import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
> import org.apache.http.params.BasicHttpParams;
> import org.apache.http.params.HttpParams;
> import org.apache.http.params.HttpProtocolParams;
> import org.apache.http.util.EntityUtils;
>
> import android.net.Uri;
> import android.util.Log;
>
> public class HttpPoster {
> private final String TAG="HttpPoster";
> private final String NETWORK_DEVICE_SIDE_TRUE =
> ";deviceside=true";
> private final String NETWORK_DEVICE_SIDE_FALSE =
> ";deviceside=false";
> private final String NETWORK_WIFI = ";interface=wifi";
> //private final String proxy="proxy.intra.bt.com:8080";
> private boolean useWifi;
> private boolean deviceSide;
> // Apache HttpClient 4.x stuff
> private static HttpParams defaultParameters = null;
> private static SchemeRegistry supportedSchemes = null;
>
> /**
> * Performs general setup.
> * This should be called only once.
> */
> private final static void setup() {
>
> supportedSchemes = new SchemeRegistry();
>
> // Register the "http" and "https" protocol schemes, they are
> // required by the default operator to look up socket
> factories.
> SocketFactory sf = PlainSocketFactory.getSocketFactory();
> supportedSchemes.register(new Scheme("http", sf, 80));
> sf = SSLSocketFactory.getSocketFactory();
> supportedSchemes.register(new Scheme("https", sf, 80));
>
> // prepare parameters
> HttpParams params = new BasicHttpParams();
> HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
> HttpProtocolParams.setContentCharset(params, "UTF-8");
> HttpProtocolParams.setUseExpectContinue(params, true);
> defaultParameters = params;
>
> } // setup
>
> private final static HttpParams getParams() {
> return defaultParameters;
> }
>
> HttpPoster(boolean deviceSide, boolean useWifi) {
> this.useWifi = useWifi;
> this.deviceSide = deviceSide;
> System.err.println("HttpPoster::HttpPoster");
> }
>
> public String post(String url,
> Hashtable<String,String>
> headerProperties, byte[] bytes )
> throws IOException {
> HttpClient client = null;
> HttpPost method=null;
> //InputStream is = null;
> //OutputStream os = null;
> //String response = "";
> HttpResponse rsp = null;
> HttpEntity entity=null;
> String fullUrl;
> //int rc;
>
> Log.d(TAG,"post() ---ENTER---");
> Log.d(TAG,"HttpPoster::post");
> Log.d(TAG,"http.proxyHost = " +
> System.getProperty("http.proxyHost"));
> Log.d(TAG,"http.proxyPort = " +
> System.getProperty("http.proxyPort"));
> try {
> fullUrl = url + (deviceSide ? NETWORK_DEVICE_SIDE_TRUE :
> NETWORK_DEVICE_SIDE_FALSE)
> + (useWifi ? NETWORK_WIFI : "");
> Uri fullUri = Uri.parse( fullUrl );
> String targetname = fullUri.getHost();
> Log.d(TAG,"HttpPoster::post -- about to open connection
> on URL = " + fullUrl);
> //
> // setup proxy server
> //
> final HttpHost target = new HttpHost(targetname, 80,
> "http");
> final HttpHost proxy = new
> HttpHost("proxy.mycompany.com",
> 8080, "http");
>
> setup() ; // Some general setup
> client = new DefaultHttpClient() ;
>
> client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
>
> method = new HttpPost( fullUrl );
> Log.d(TAG,"Executing request to " + target + " via " +
> proxy);
> rsp = client.execute(target, method);
> entity = rsp.getEntity();
>
>
> Log.d(TAG,"---------------------------------------------");
> Log.d(TAG, rsp.getStatusLine().toString() );
> Header [] headers = rsp.getAllHeaders();
> for (int i=0; i<headers.length; i++) {
> Log.d(TAG,"\t" + headers[i] );
> }
>
> Log.d(TAG,"---------------------------------------------");
>
> if (rsp.getEntity() != null) {
> Log.d(TAG, EntityUtils.toString(
> rsp.getEntity() ) );
> }
> } finally {
> if (entity != null)
> entity.consumeContent(); // release
> connection gracefully
> }
> // return response;
> Log.d(TAG,"post() ---EXIT---");
> return new String("");
> }
>
> private final static HttpClient createHttpClient() {
>
> ClientConnectionManager ccm =
> new ThreadSafeClientConnManager(getParams(),
> supportedSchemes);
> // new SingleClientConnManager(getParams(),
> supportedSchemes);
>
> DefaultHttpClient dhc =
> new DefaultHttpClient(ccm, getParams());
>
> return dhc;
> }
>
> }
>
> My TestHttp application launches an Activity TestHttp::onCreate()
> method whose DDMS logcat output is
>
> 08-21 14:25:54.189: DEBUG/TestHttp(238): onCreate()---enter---
> 08-21 14:25:54.248: DEBUG/TestHttp(238): httpClient is non-null
> 08-21 14:25:54.398: DEBUG/TestHttp(238): in catch {} response is null
> 08-21 14:25:54.418: ERROR/TestHttp(238): Error
> 08-21 14:25:54.418: ERROR/TestHttp(238): java.net.SocketException:
> unknown error
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> org.apache.harmony.luni.platform.OSNetworkSystem.createSocketImpl(Native
> Method)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> org.apache.harmony.luni.platform.OSNetworkSystem.createSocket(OSNetworkSystem.java:
> 79)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> org.apache.harmony.luni.net.PlainSocketImpl2.create(PlainSocketImpl2.java:
> 59)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> java.net.Socket.checkClosedAndCreate(Socket.java:763)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> java.net.Socket.connect(Socket.java:910)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:
> 117)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:
> 129)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:
> 164)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:
> 119)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:
> 348)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:
> 555)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:
> 509)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> com.bt.gcto.android.testhttp.HttpPoster.post(HttpPoster.java:115)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> com.bt.gcto.android.testhttp.TestHttp.onCreate(TestHttp.java:42)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:
> 1121)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:
> 2094)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:
> 2147)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> android.app.ActivityThread.access$1800(ActivityThread.java:112)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1572)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> android.os.Handler.dispatchMessage(Handler.java:88)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> android.os.Looper.loop(Looper.java:123)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> android.app.ActivityThread.main(ActivityThread.java:3708)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> java.lang.reflect.Method.invokeNative(Native Method)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> java.lang.reflect.Method.invoke(Method.java:492)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> com.android.internal.os.ZygoteInit
> $MethodAndArgsCaller.run(ZygoteInit.java:734)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:492)
> 08-21 14:25:54.418: ERROR/TestHttp(238): at
> dalvik.system.NativeStart.main(Native Method)
> 08-21 14:25:54.449: DEBUG/TestHttp(238): onCreate()---exit----
>
> The TestHtpp Activity exercises HttpPoster::post() within its
> onCreate() method, thus
>
> public class TestHttp extends Activity {
> private static final String TAG="TestHttp";
> private DefaultHttpClient httpClient = null;
> private final Uri galleryServerUri= Uri.parse("http://my-gallery-
> server/gallery2/main.php");
> private final String uname = "graeme";
> private final String pwd = "123456";
>
> /** Called when the activity is first created. */
> @Override
> public void onCreate(Bundle icicle) {
> Log.d(TAG,"onCreate()---enter---");
> super.onCreate(icicle);
> setContentView(R.layout.main);
> try {
> HttpPoster poster = new HttpPoster(false, false) ;
> poster.post( galleryServerUri.toString(), null,
> null );
> } catch (Exception e) {
> Log.e(TAG, "Error", e);
> }
> Log.d(TAG,"onCreate()---exit----");
> }
>
> }
>
> The logcat ouput from class HttpPoster is just ...
>
> 08-21 14:25:54.257: DEBUG/HttpPoster(238): post() ---ENTER---
> 08-21 14:25:54.257: DEBUG/HttpPoster(238): HttpPoster::post
> 08-21 14:25:54.257: DEBUG/HttpPoster(238): http.proxyHost = null
> 08-21 14:25:54.257: DEBUG/HttpPoster(238): http.proxyPort = null
> 08-21 14:25:54.269: DEBUG/HttpPoster(238): HttpPoster::post -- about
> to open connection on URL
> =http://my-gallery-server/gallery2/main.php;deviceside=false
> 08-21 14:25:54.289: DEBUG/HttpPoster(238): Executing request
> tohttp://my-gallery-server:80viahttp://proxy.mycompany.com:8080
>
> I am running Android SDK-0.9 on and Windows XP SP2 devel machine.
> Do I need to take any special; steps to enable the emulator to open
> network
> (socket) connections ?
>
> Thanks for any help.
> Graeme
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[EMAIL PROTECTED]
Announcing the new Android 0.9 SDK beta!
http://android-developers.blogspot.com/2008/08/announcing-beta-release-of-android-sdk.html
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---