java使用HttpClient访问http请求
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.7</version>
</dependency>
POST请求发送方式
发送POST请求有两种方式
- 通过Form表单
- 通过JSON发送
(JSON转换工具均使用Alibaba 的fastJson)
Form表单
//初始化HttpClient用于发送http请求
HttpClient client = HttpClientBuilder.create().build();
//创建post请求方式
HttpPost post = new HttpPost("string类型的请求地址");
//初始化Form表单内容列表,都是固定的参数,不变
ArrayList<NameValuePair> pairs = new ArrayList<>();
//将需要传输的参数填入表单
pairs.add(new BasicNameValuePair("表单的键","表单的值"));
pairs.add(new BasicNameValuePair("表单的键","表单的值"));
.....
//拼装表单请求
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs, "指定字符集,一般都是UTF-8");
//拼装表单请求至POST请求体中
post.setEntity(entity);
//使用HttpClient发送POST请求并接收返回内容
CloseableHttpResponse response = client.execute(post);
//获取返回体中的返回内容
HttpEntity responseEntity = response.getEntity();
//返回内容转string类型
String s = EntityUtils.toString(responseEntity);
//之后可以创建和返回体类似的结构,通过fastjson去接收,再返回即可
return s;
JSON表单
//初始化HttpClient用于发送http请求
HttpClient client = HttpClientBuilder.create().build();
//创建post请求方式
HttpPost post = new HttpPost("string类型的请求地址");
//设置请求的Header,发送的JSON类型
post.setHeader("Content-Type", "application/json;charset=UTF-8");
//根据JSON类型的结构体,创建对象并填入参数
.....
//将封装好的对象转成JSON类型,并指定编码格式,放入post请求中
StringEntity stringEntity = new StringEntity(JSONObject.toJSONString(dto), Constants.UTF_8);
//拼装表单请求至POST请求体中
post.setEntity(entity);
//使用HttpClient发送POST请求并接收返回内容
CloseableHttpResponse response = client.execute(post);
//获取返回体中的返回内容
HttpEntity responseEntity = response.getEntity();
//返回内容转string类型
String s = EntityUtils.toString(responseEntity);
//之后可以创建和返回体类似的结构,通过fastjson去接收,再返回即可
return s;
GET请求发送方式
get请求都是form表单类型,所以和PSOT请求的Form表单类似
//初始化HttpClient用于发送http请求
HttpClient client = HttpClientBuilder.create().build();
//初始化Form表单内容列表,都是固定的参数,不变
ArrayList<NameValuePair> pairs = new ArrayList<>();
//将需要传输的参数填入表单
pairs.add(new BasicNameValuePair("表单的键","表单的值"));
pairs.add(new BasicNameValuePair("表单的键","表单的值"));
.....
//拼装表单请求
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs, "指定字符集,一般都是UTF-8");
//创建get请求方式,并把请求拼接在后面
HttpGet get = new HttpGet("string类型的请求地址"+"?"+EntityUtils.toString(entity));
//使用HttpClient发送POST请求并接收返回内容
CloseableHttpResponse response = client.execute(post);
//获取返回体中的返回内容
HttpEntity responseEntity = response.getEntity();
//返回内容转string类型
String s = EntityUtils.toString(responseEntity);
//之后可以创建和返回体类似的结构,通过fastjson去接收,再返回即可
return s;
问题
1、请求地址格式问题
错误异常日志内容
Illegal character in query at index 94:
这是因为请求连接中的一部分内容并没有格式化导致的
只需要对请求地址进行格式化就可以解决
之后将URI填入地址栏即可
URL url = new URL("请求地址");
URI uri = new URI(url.getProtocol(), url.getHost()+":"+url.getPort(), url.getPath(), url.getQuery(), null);