现在的位置: 首页 > 综合 > 正文

HttpPost设置请求超时的2种方法:DefaultHttpClient与BasicHttpParams

2018年05月25日 ⁄ 综合 ⁄ 共 2708字 ⁄ 字号 评论关闭

通过HttpPost和DefaultHttpClient发送http的post请求时,设置连接超时和读取超时等参数,有2种方法,本人测试了第1种。先上代码。

第1种方法:通过DefaultHttpClient的getParams()方法设置。

import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;

public class mHttpRequest {
	
	/*
	 * 发送post请求
	 * 
	 * @param posturl:接口路径
	 * @param params:模拟form表单数据
	*/
	public static void mPostForm(String posturl, List<NameValuePair> params) throws Exception
	{
		   //声明一个httppost绑定参数
		   HttpPost httppost = new HttpPost(posturl);
		   // 绑定到Entity
		   httppost.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));
		   //实例化httpclient对象
		   DefaultHttpClient httpclient = new DefaultHttpClient();
		   //请求超时
		   httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 3000);
		   //读取超时
		   httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,3000);
		   //执行请求
		   HttpResponse httpResponse =  httpclient.execute(httppost);
		   //返回状态为200
		   if(httpResponse.getStatusLine().getStatusCode() == 200){
		      // 得到应答的字符串,这也是一个 JSON 格式保存的数据 
		      String res = EntityUtils.toString(httpResponse.getEntity());  
		      // 应答生成 JSON 对象   
		      JSONObject result = new JSONObject( res);  
		      int errcode = result.getInt("errcode");
		      //String errmsg = result.getString("errmsg");
		      //返回结果
		      if(errcode==0){
		      }
		      else{
		      }
		   }
    }
		
}

第2种:通过BasicHttpParams实例化一个httpparams,将连结超时、读取超时等参数赋给httpparams,然后传递緥DefaultHttpClient(),如下:

	/*
	 * 发送post请求
	 * 
	 * @param posturl:接口路径
	 * @param params:模拟form表单数据
	*/
	public static void mPostForm(String posturl, List<NameValuePair> params) throws Exception
	{
		   //声明一个httppost绑定参数
		   HttpPost httppost = new HttpPost(posturl);
		   // 绑定到Entity
		   httppost.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));
		   //实例化BasicHttpParams,绑定超时等参数
		   BasicHttpParams httpparams = new BasicHttpParams();
		   //请求超时
		   HttpConnectionParams.setConnectionTimeout(httpparams, 3000);  
		   //读取超时  
		   HttpConnectionParams.setSoTimeout(httpparams, 3000); 
		   //将httpparams传递给DefaultHttpClient
		   DefaultHttpClient httpclient = new DefaultHttpClient();
		   //请求超时
		   httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 3000);
		   //读取超时
		   httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,3000);
		   //执行请求
		   HttpResponse httpResponse =  httpclient.execute(httppost);
		   //返回状态为200
		   if(httpResponse.getStatusLine().getStatusCode() == 200){
		      // 得到应答的字符串,这也是一个 JSON 格式保存的数据 
		      String res = EntityUtils.toString(httpResponse.getEntity());  
		      // 应答生成 JSON 对象   
		      JSONObject result = new JSONObject( res);  
		      int errcode = result.getInt("errcode");
		      //String errmsg = result.getString("errmsg");
		      //返回结果
		      if(errcode==0){
		      }
		      else{
		      }
		   }
    }

2种方法的区别在于:第1种方法,通过DefaultHttpClient自带的方法设置参数;而第2种方法通过声明一个BasicHttpParams来专门存放参数,再传递给DefaultHttpClient。

第2种方法我没有测试过,如果有问题请留言。

抱歉!评论已关闭.