httpclient 实现http请求调用以及常见问题

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);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值