HttpClient4 POST数据及问题

post 方式挂参数的三种格式, mark一下。 

 

其中尤其需要注意的是下面这个error()的调用方法,使用到MultipartEntity 带3个参数的完整 , 会导致请求参数在服务器端无法获取到post参数! 

  

MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.STRICT, null, charsetObj);

 

but上面这个new MultipartEntity,如果使用无参的构造函数则一切ok, public MultipartEntity() 

 

--------------

具体细节待深究

 

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;


public class Test {
	
	final static String URL = "http://localhost/";
	final static Charset charsetObj = Charset.forName("utf-8");

	public static void main(String[] args) throws Exception {
		error();
//		demo() ;
//		method3();
	}
	
	  public static void demo() throws Exception {  
		     DefaultHttpClient httpclient = new DefaultHttpClient();  
		    // 目标地址  
		     HttpPost httppost = new HttpPost(URL);  
		    // 构造最简单的字符串数据  
		     StringEntity reqEntity = new StringEntity("firstname=abcde&lastname=fghi");  
		    // 设置类型  
		     reqEntity.setContentType("application/x-www-form-urlencoded");  
		    // 设置请求的数据  
		     httppost.setEntity(reqEntity);  
		    // 执行  
				HttpResponse httpresponse = httpclient.execute(httppost);
				HttpEntity entity = httpresponse.getEntity();
				String body = EntityUtils.toString(entity); 
				System.out.println(body);

	  }

	  public static void error() {
			int tryTimes = 3;
			MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.STRICT, null, charsetObj);
			try {
				HttpClient client = new DefaultHttpClient();
//				client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 3000);
				HttpPost httppost = new HttpPost(URL);

				multipartEntity.addPart("firstname", new StringBody("xxxxxxxxxxxxxxxxxxxxxxx",charsetObj));
				multipartEntity.addPart("lastname", new StringBody("yyyyyyyyyyyyyyyyyyyyyyy",charsetObj));
				//设置连接超时时间
				//设置读取response超时时间
				httppost.setEntity(multipartEntity);
				
				HttpResponse httpresponse = client.execute(httppost);
				HttpEntity entity = httpresponse.getEntity();
				String body = EntityUtils.toString(entity);
				System.out.println(body);	 
			}catch (Exception e) {
				System.out.println(e);
			}
	  }
	  
	  public static void method3() {
			HttpClient client = new DefaultHttpClient();
			HttpPost httppost = new HttpPost(URL);

			List<NameValuePair> params = new ArrayList<NameValuePair>();
			params.add(new BasicNameValuePair("email", "xxx@gmail.com"));
			params.add(new BasicNameValuePair("pwd", "xxx"));
			params.add(new BasicNameValuePair("save_login", "1")); 

			try {
				// Post请求
				// 设置参数
				httppost.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));
				// 发送请求
				HttpResponse httpresponse = client.execute(httppost);
				HttpEntity entity = httpresponse.getEntity();
				String body = EntityUtils.toString(entity);
				System.out.println(body);
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClientProtocolException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	  }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值