通过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种方法我没有测试过,如果有问题请留言。