android网络通讯之HttpClient4不指定参数名发送Post

来源:互联网 发布:python if not语句 编辑:程序博客网 时间:2024/06/05 05:03

         在HttpClient4之前都是通过List<NameValuePair>键值对的形式来向服务器传递参数 ,在4.0版本中在加入了不指定参数名发送数据的形式,利用StringEntity来完成,相当于向一个流写入请求。

        HttpClient4中采用ThreadSafeClientConnManager来保证线程的安全,优于2.0的MultiThreadedHttpConnectionManager类。另外Apache官方强烈推荐只使用一个HttpClient的实例,所以我们可以将以下demo方法写成单例模式。可以参考我的博文http://blog.csdn.net/caicongyang/article/details/9498437

demo将使用StringEntity来完成不指定参数名发送Post,已经采用ThreadSafeClientConnManager来保证线程的安全

   /** 发送报文到GPRS网关 */   public String sendToHttpClientGprs(String url,String content) {BufferedReader reader = null;StringBuffer stringBuffer = null;   HttpParams httpParams = new BasicHttpParams();             // 设置超时        ConnManagerParams.setTimeout(httpParams, 5*1000);        HttpConnectionParams.setConnectionTimeout(httpParams, 5*1000);          HttpConnectionParams.setSoTimeout(httpParams, 5*1000);                     // 多线程最大连接数          ConnManagerParams.setMaxConnectionsPerRoute(httpParams, new ConnPerRouteBean(5));            // 多线程总连接数          ConnManagerParams.setMaxTotalConnections(httpParams, 10);           // 设置异常处理机制        HttpProtocolParams.setUseExpectContinue(httpParams, true);          // 设置是否检查旧连接          HttpConnectionParams.setStaleCheckingEnabled(httpParams, false);          // 设置版本        HttpProtocolParams.setVersion(httpParams, HttpVersion.HTTP_1_1);   // 设置编码        HttpProtocolParams.setContentCharset(httpParams, HTTP.UTF_8);           // 设置重定向          HttpClientParams.setRedirecting(httpParams, false);                    // 设置userAgent         String userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2) Gecko/20100115 Firefox/3.6";          HttpProtocolParams.setUserAgent(httpParams, userAgent);                         //设置是否延迟发送        HttpConnectionParams.setTcpNoDelay(httpParams, true);             //设置缓存大小        HttpConnectionParams.setSocketBufferSize(httpParams, DEFAULT_SOCKET_BUFFER_SIZE);                      // 支持http与https        SchemeRegistry schemeRegistry = new SchemeRegistry();            schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));            schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));    //ThreadSafeClientConnManager线程安全管理类        ClientConnectionManager manager = new ThreadSafeClientConnManager(httpParams, schemeRegistry);            HttpClient   client = new DefaultHttpClient(manager, httpParams);  //post请求HttpPost httppost =  new HttpPost(path);httppost.setHeader("connection", "Keep-Alive");httppost.setHeader("Content-Type", "text/plain");try {//直接传入发送内容,不指定参数名StringEntity myEntity = new StringEntity(content, "UTF-8");httppost.setEntity(myEntity); // 发送请求HttpResponse response = client.execute(httppost);Log.i("ResponseCode", response.getStatusLine().getStatusCode() + "");// 请求成功if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));stringBuffer = new StringBuffer();String line = "";while ((line = reader.readLine()) != null) {stringBuffer.append(line);}}} catch (Exception e) {e.printStackTrace();}  finally {try {// 关闭流if (null != reader) {reader.close();reader = null;}} catch (IOException e) {e.printStackTrace();}}if (null == stringBuffer) {return "-1";} else {return stringBuffer.toString();}}

原创粉丝点击