httpclient 发送一个请求
httpclient版本 4.1
发送一个post请求
public static JSONObject post(String url,JSONObject json){ HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(url); JSONObject response = null; try { StringEntity s = new StringEntity(json.toString()); s.setContentEncoding("UTF-8"); s.setContentType("application/json"); post.setEntity(s); HttpResponse res = client.execute(post); if(res.getStatusLine().getStatusCode() == HttpStatus.OK.value()){ HttpEntity entity = res.getEntity(); String charset = EntityUtils.getContentCharSet(entity); response = new JSONObject(new JSONTokener(new InputStreamReader(entity.getContent(),charset))); } } catch (Exception e) { throw new RuntimeException(e); } return response; }
模拟提交form:
private static HttpPost postForm(String url, Map<String, String> params){ HttpPost httpost = new HttpPost(url); List<NameValuePair> nvps = new ArrayList <NameValuePair>(); Set<String> keySet = params.keySet(); for(String key : keySet) { nvps.add(new BasicNameValuePair(key, params.get(key))); } try { log.info("set utf-8 form entity to httppost"); httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return httpost; }
get请求
public static String get(String url) { DefaultHttpClient httpclient = new DefaultHttpClient(); String body = null; log.info("create httppost:" + url); HttpGet get = new HttpGet(url); body = invoke(httpclient, get); httpclient.getConnectionManager().shutdown(); return body; }
发起一个post请求,设置超时:
需要注意各个版本设置超时的api都不相同。
还有需要注意的是3中超时:
1,连接超时:connectionTimeout 指的是连接一个url的连接等待时间。
2,读取数据超时:soTimeout 指的是连接上一个url,获取response的返回等待时间
3,SocketTimeout :定义了Socket读数据的超时时间,即从服务器获取响应数据需要等待的时间
public static String sendPostRequest(String url, String str, String contentType, String charset){ // HttpParams httpParams = new BasicHttpParams();//4.1版本 // HttpConnectionParams.setConnectionTimeout(httpParams, 5000);//建立连接超时时间,防止调用url为死链,消耗服务器io // HttpConnectionParams.setSoTimeout(httpParams, 3000);// 响应超时 // CloseableHttpClient httpClient = new DefaultHttpClient(); RequestConfig.Builder requestBuilder = RequestConfig.custom();//4.3.5版本 requestBuilder = requestBuilder.setConnectTimeout(5000); //requestBuilder = requestBuilder.setConnectionRequestTimeout(100); HttpClientBuilder builder = HttpClientBuilder.create(); builder.setDefaultRequestConfig(requestBuilder.build()); CloseableHttpClient httpClient = builder.build(); HttpPost post = new HttpPost(url); //RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(2000).setConnectTimeout(2000).build(); //post.setConfig(requestConfig); post.setHeader("Content-Type", contentType); ResponseHandler<String> responseHandler = new BasicResponseHandler(); String response = null; try { post.setEntity(new StringEntity(str, charset)); long start = System.currentTimeMillis(); try { response = httpClient.execute(post,responseHandler); } catch (Exception ConnectionTimeoutException) {//建立连接超时异常 long p = System.currentTimeMillis() - start; log.error("sendPostRequest has a ConnectionTimeoutException timeout=> "+ p +" "+ url); }finally{ //httpClient.getConnectionManager().shutdown(); post.releaseConnection(); } } catch (Exception e) { log.error("执行HTTP Post请求" + url + "时,发生异常!", e); } return response; }