zoukankan      html  css  js  c++  java
  • 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;
        }
  • 相关阅读:
    高级(线性)素数筛
    Dijkstra(迪杰斯特拉)算法
    简单素数筛
    【解题报告】 POJ1958 奇怪的汉诺塔(Strange Tower of Hanoi)
    4 jQuery Chatting Plugins | jQuery UI Chatbox Plugin Examples Like Facebook, Gmail
    Web User Control Collection data is not storing
    How to turn on IE9 Compatibility View programmatically in Javascript
    从Javascrip 脚本中执行.exe 文件
    HtmlEditorExtender Ajax
    GRIDVIEW模板中查找控件的方式JAVASCRIPT
  • 原文地址:https://www.cnblogs.com/killbug/p/4037488.html
Copyright © 2011-2022 走看看