httpClient使用postMethod方法发送请求,携带参数并解决中文乱码问题

前言:工作中遇到两个系统之间通信的问题,需求是这样的:要求将信息上报给上级部门(这里的上级部门是两一个系统),这就是跨系统通信了

解决方案:使用httpclient实现网络通信,传递数据。

关键问题:httpClient  postMethod  传递参数  防止中文乱码

一,所需jar包

         maven引用如下:

               <dependency>
			<groupId>commons-httpclient</groupId>
			<artifactId>commons-httpclient</artifactId>
			<version>3.0</version>
		</dependency>
		<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
			<version>1.3</version>
		</dependency>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging-api</artifactId>
			<version>1.1</version>
		</dependency>

二,使用httpclient的postMethod方法发送请求:

	//创建PostMethod的子类设置编码格式
	public static class UTF8PostMethod extends PostMethod{     
	    public UTF8PostMethod(String url){     
	    super(url);     
	    }     
	    @Override     
	    public String getRequestCharSet() {     
	        //return super.getRequestCharSet();     
	        return "UTF-8";     
	    }  
	}


         JSONObject json = JSONObject.fromObject(event);//将java对象转换为json对象  
          String str = json.toString();//将json对象转换为字符串
		     
          String url = "http://172.20.57.87:8080/gyly_ec_new3/api/mobileservices/district";//接口url
		     
          HttpClient client = new HttpClient();//创建httpClient对象
	  PostMethod post = new UTF8PostMethod(url);//创建PostMethod的子类UTF8PostMethod来设置编码
          NameValuePair message = new NameValuePair("json", str);//post请求必须使用  NameValuePair 类传递参数
	  post.setRequestBody(new NameValuePair[]{message});
			 
          try {
	        int code=client.executeMethod(post);//发送数据
		if (code==200) {
			System.out.println("请求成功!");
		}else {
			System.out.println("请求失败!");
		}
		} catch (HttpException e) {
			e.printStackTrace();
		} catch (IOException e) {
		        e.printStackTrace();
		}finally {
			post.releaseConnection();//关闭连接  
	        }
上面的代码都有备注。

主要说一下:

PostMethod post = new UTF8PostMethod(url);//创建PostMethod的子类UTF8PostMethod来设置编码
这里使用postMethod 对象,防止中文乱码,必须创建其子类
UTF8PostMethod
设置编码,才可以防止中文乱码。


结语:在网上看了很多种httpclient的用法,自己在做的时候也遇到很多问题,现在问题解决了,写博客的时候却感觉没什么可写的,关键是找到正确的方式。如上代码中我已经实现,并且可以使用。

如果你恰好也有同样的需求,在看了我的代码后有不明白的地方,可以给我留言,或者加我的qq:416404891,我会尽力给你解答。

互相学习。。。。。。。。。。。。。。。。。。

                                                              晚安!


  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你可以使用Apache HttpClient发送GET请求携带参数请求头。下面是一个示例代码: ```java import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.NameValuePair; import org.apache.http.client.utils.URIBuilder; import org.apache.http.message.BasicNameValuePair; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { HttpClient httpClient = HttpClientBuilder.create().build(); try { // 构建请求参数 List<NameValuePair> params = new ArrayList<>(); params.add(new BasicNameValuePair("param1", "value1")); params.add(new BasicNameValuePair("param2", "value2")); // 构建请求URI URI uri = new URIBuilder() .setScheme("http") .setHost("example.com") .setPath("/api/endpoint") .setParameters(params) .build(); // 创建GET请求 HttpGet request = new HttpGet(uri); // 添加请求头 request.addHeader("User-Agent", "Mozilla/5.0"); // 发送请求并获取响应 httpClient.execute(request); } catch (IOException | URISyntaxException e) { e.printStackTrace(); } } } ``` 在上面的示例中,我们通过`URIBuilder`构建了带参数请求URI,并使用`HttpGet`创建了GET请求。然后,我们使用`request.addHeader()`方法添加了请求头,并使用`httpClient.execute()`方法发送请求并获取响应。请注意,示例中的参数和URI仅供参考,请根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值