2013-05-03 5 views
1

J'essaye de configurer une requête HTTP POST, mais je reçois SocketTimeoutException tout le temps. Est-ce que quelqu'un sait ce qui ne va pas avec mon code?http post demande get SocketTimeoutException

int TIMEOUT_MILLISEC = 60000; // = 60 seconds 
HttpParams httpParams = new BasicHttpParams(); 
HttpConnectionParams.setConnectionTimeout(httpParams, TIMEOUT_MILLISEC); 
HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC); 

client = new DefaultHttpClient(httpParams); 

StringBuilder builder = new StringBuilder(URL_STRING); 

HttpPost request = new HttpPost(builder.toString()); 

request.setEntity(new ByteArrayEntity(jobj.toString().getBytes("UTF8"))); 

HttpResponse response = client.execute(request); 
+0

peut-être que votre serveur ne répond pas? – njzk2

+0

Votre serveur écoute-t-il sur le port par défaut? Si non. Avez-vous spécifié le port? Votre serveur répond-il correctement aux pétitions sur le navigateur Web? Quel genre de réponse attendez-vous? –

Répondre

3

Référez-vous à ce code. Il vous aidera à comprendre la gestion de presque toutes les exceptions HttpClient de base. try {

// check for request method 
    if (method == "POST") { 
     // request method is POST 
     // defaultHttpClient 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 
     httpPost.setEntity(new UrlEncodedFormEntity(params)); 

     // new 
     HttpParams httpParameters = httpPost.getParams(); 
     // Set the timeout in milliseconds until a connection is 
     // established. 
     int timeoutConnection = 10000; 
     HttpConnectionParams.setConnectionTimeout(httpParameters, 
       timeoutConnection); 
     // Set the default socket timeout (SO_TIMEOUT) 
     // in milliseconds which is the timeout for waiting for data. 
     int timeoutSocket = 10000; 
     HttpConnectionParams 
       .setSoTimeout(httpParameters, timeoutSocket); 
     // new 
     HttpResponse httpResponse = httpClient.execute(httpPost); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     is = httpEntity.getContent(); 

    } else if (method == "GET") { 
     // request method is GET 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     String paramString = URLEncodedUtils.format(params, "utf-8"); 
     url += "?" + paramString; 
     HttpGet httpGet = new HttpGet(url); 
     // new 
     HttpParams httpParameters = httpGet.getParams(); 
     // Set the timeout in milliseconds until a connection is 
     // established. 
     int timeoutConnection = 10000; 
     HttpConnectionParams.setConnectionTimeout(httpParameters, 
       timeoutConnection); 
     // Set the default socket timeout (SO_TIMEOUT) 
     // in milliseconds which is the timeout for waiting for data. 
     int timeoutSocket = 10000; 
     HttpConnectionParams 
       .setSoTimeout(httpParameters, timeoutSocket); 
     // new 
     HttpResponse httpResponse = httpClient.execute(httpGet); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     is = httpEntity.getContent(); 
    } 

} catch (UnsupportedEncodingException e) { 
    throw new Exception("Unsupported encoding error."); 
} catch (ClientProtocolException e) { 
    throw new Exception("Client protocol error."); 
} catch (SocketTimeoutException e) { 
    throw new Exception("Sorry, socket timeout."); 
} catch (ConnectTimeoutException e) { 
    throw new Exception("Sorry, connection timeout."); 
} catch (IOException e) { 
    throw new Exception("I/O error(May be server down)."); 
} 
0

Pas besoin de régler le délai de prise. Supprimez cette ligne:
HttpConnectionParams.setSoTimeout (httpParams, TIMEOUT_MILLISEC);