2013-05-03 98 views
1

我试图配置一个HTTP POST请求,但我总是得到SocketTimeoutException。 有人知道我的代码有什么问题吗?http post request 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

可能是你的服务器没有回答? – njzk2 2013-05-03 08:21:55

+0

您的服务器是否在默认端口上侦听?如果不。你有没有指定端口?您的服务器是否在Web浏览器上正确回答请求?你期待什么样的回应? – 2013-05-03 08:25:46

回答

3

请参阅此代码。它将帮助您理解处理几乎所有基本的HttpClient异常。 尝试{

// 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

无需设置套接字超时。 删除此行:
HttpConnectionParams.setSoTimeout(httpParams,TIMEOUT_MILLISEC);