您的位置:首页 > 理论基础 > 计算机网络

HttpClient get和post请求的示例代码以及防乱码处理

2017-02-22 22:39 1061 查看
请求别人发布的服务我们可能就会使用到HttpClient这个包,HttpClient就是一个支持 HTTP 协议的客户端编程工具包,用来模拟浏览器请求。

乱码解决方法:

就是给HttpGet对象或者HttpPost对象添加头部,如下所示:

//设置请求的报文头部的编码
obj.setHeader(new BasicHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"));

//设置期望服务端返回的编码
obj.setHeader(new BasicHeader("Accept", "text/plain;charset=utf-8"));


1.发布服务

这里我们先发布一个服务用于测试HttpClient的请求,这里发布两个接口,一个用于测试post的一个用于测试get的,springMVC的controller的代码片段如下:

/**
* 测试httpclient get方法
*
* @param id
* @return
*/
@RequestMapping(value = "/api/httpClientTestGet.do", method = RequestMethod.GET)
@ResponseBody
public String httpClientTestGet(String id) {

System.out.println("收到httpclient请求:id=" + id);

return "id为:" + id + "的名字是lijie";
}

/**
* 测试httpclient post方法
*
* @param name
* @param password
* @return
*/
@RequestMapping(value = "/api/httpClientTestPost", method = RequestMethod.POST)
@ResponseBody
public String httpClientTestPost(String username, String password) {

System.out.println("name:" + username + " ,password" + password);

return "登陆成功!";
}


2.创建maven工程测试HttpClient的使用

工程结构:



pom文件的内容:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>httpclient-maven</groupId>
<artifactId>httpclient-maven</artifactId>
<version>0.0.1-SNAPSHOT</version>

<dependencies>
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.7</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
</project>


测试类HttpClientTest代码如下

package com.lijie.hc;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

/**
*
* @author 黎杰
*
*/
public class HttpClientTest {

public static void main(String[] args) throws Exception {

//      testGet();

//      testPost();
}

/**
* httpclient get请求
*
* @throws Exception
*/
public static void testGet() throws Exception {

//创建一个httpclient对象
CloseableHttpClient client = HttpClients.createDefault();

//创建URIBuilder
URIBuilder uri = new URIBuilder("http://localhost:8080/api/httpClientTestGet.do");

//设置参数
uri.addParameter("id", "10001");

//创建httpGet对象
HttpGet hg = new HttpGet(uri.build());

//设置请求的报文头部的编码
hg.setHeader(
new BasicHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"));

//设置期望服务端返回的编码
hg.setHeader(new BasicHeader("Accept", "text/plain;charset=utf-8"));

//请求服务
CloseableHttpResponse response = client.execute(hg);

//获取响应码
int statusCode = response.getStatusLine().getStatusCode();

if (statusCode == 200) {

//获取返回实例entity
HttpEntity entity = response.getEntity();

//通过EntityUtils的一个工具方法获取返回内容
String resStr = EntityUtils.toString(entity, "utf-8");

//输出
System.out.println("请求成功,请求返回内容为: " + resStr);
} else {

//输出
System.out.println("请求失败,错误码为: " + statusCode);
}

//关闭response和client
response.close();
client.close();
}

public static void testPost() throws Exception {

//创建一个httpclient对象
CloseableHttpClient client = HttpClients.createDefault();

//创建一个post对象
HttpPost post = new HttpPost("http://localhost:8080/api/httpClientTestPost.do");

//创建一个Entity,模拟表单数据
List<NameValuePair> formList = new ArrayList<>();

//添加表单数据
formList.add(new BasicNameValuePair("username", "黎杰"));
formList.add(new BasicNameValuePair("password", "10086"));

//包装成一个Entity对象
StringEntity entity = new UrlEncodedFormEntity(formList, "utf-8");

//设置请求的内容
post.setEntity(entity);

//设置请求的报文头部的编码
post.setHeader(
new BasicHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"));

//设置期望服务端返回的编码
post.setHeader(new BasicHeader("Accept", "text/plain;charset=utf-8"));

//执行post请求
CloseableHttpResponse response = client.execute(post);

//获取响应码
int statusCode = response.getStatusLine().getStatusCode();

if (statusCode == 200) {

//获取数据
String resStr = EntityUtils.toString(response.getEntity());

//输出
System.out.println("请求成功,请求返回内容为: " + resStr);
} else {

//输出
System.out.println("请求失败,错误码为: " + statusCode);
}

//关闭response和client
response.close();
client.close();

}
}


做get请求测试:

服务端收到的请求:



客户端收到的请求:



做post测试

服务端收到的请求:



客户端收到的请求:



测试完成!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: