HttpClient POST/SET方法
前言:
网络API接口:https://api.apiopen.top/searchMusic
此API接口返回类型为JSON格式类型
GET:从指定资源请求数据
POST:向指定资源提交要被处理的数据
GET与POST的区别:
①GET在浏览器回退时是无害的,而POST会再次提交请求。
②GET只支持URL编码。
③GET参数通过URL传递,参数直接暴露在URL中会泄露信息,POST通过Request body传递不会有这样的问题。
④GET请求在URL中传递参数有长度限制,POST没有长度限制。
⑤对POST请求会险发送Header,服务器相应成功,在发送Date,服务器再次响应,需响应两次。GET会把Header与Date一起发送到服务端,服务器只响应一次。
一、POST方法
创建POST方法类
package com.HttpClient.Test; import java.io.IOException;
import java.util.ArrayList; import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils; import com.HttpClient.jiexi.HttpClient_jiexi; public class HttpClient_post { private String entityStr;
HttpClient_jiexi JSONTOOL = new HttpClient_jiexi(); //封装POST方法
public String post(String POST_URL,ArrayList<NameValuePair> list) { try {
//把参数放入请求体中
UrlEncodedFormEntity entityParam = new UrlEncodedFormEntity(list, "UTF-8");
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost(POST_URL);
httpPost.setEntity(entityParam);
//发起请求
CloseableHttpResponse response = httpClient.execute(httpPost);
//获取返回状态,并判断是否连接成功。
if (response.getStatusLine().getStatusCode()==200) {
System.out.println("连接成功");
} else {
System.out.println("连接异常");
}
// 获得响应的实体对象
HttpEntity entity = response.getEntity(); //转换成字符串
entityStr = EntityUtils.toString(entity, "UTF-8");
//关闭请求
httpClient.close(); } catch (ClientProtocolException e) {
System.err.println("Http协议异常");
e.printStackTrace();
} catch (IOException e) {
System.err.println("IO异常");
e.printStackTrace();
}
return entityStr;
} }
调用POST方法类
package com.HttpClient.Test; import java.util.ArrayList;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.testng.annotations.Test; public class HttpClient_case1 { HttpClient_post post = new HttpClient_post();
private String POST_URL = "https://api.apiopen.top/searchMusic";
private String entity;
private ArrayList<NameValuePair> list; @Test
public void test1() {
// 构造list集合,并添加参数
BasicNameValuePair basicNameValuePair = new BasicNameValuePair("name", "十年");
list = new ArrayList<>();
list.add(basicNameValuePair);
// 执行请求,需要传入URL与参数
entity = post.post(POST_URL,list);
System.out.println(entity);
} }
二、GET方法
创建GET方法类
package com.HttpClient.Test; import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List; import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
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.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils; public class HttpClient_get { public String entityStr ;
public CloseableHttpResponse response ; public String get(String GET_URL,ArrayList<NameValuePair> list) throws URISyntaxException{try {
CloseableHttpClient httpClient = HttpClients.createDefault();
URIBuilder uriBuilder = new URIBuilder(GET_URL);
uriBuilder.setParameters(list);
//根据带参数的URI对象构建GET请求对象
HttpGet httpGet = new HttpGet(uriBuilder.build());
//执行请求
response = httpClient.execute(httpGet);
//获得响应的实体对象
HttpEntity entity = response.getEntity();
//转换成字符串
entityStr = EntityUtils.toString(entity, "UTF-8"); //关闭请求
httpClient.close();
} catch (ClientProtocolException e) {
System.err.println("Http协议异常");
e.printStackTrace();
} catch (IOException e) {
System.err.println("IO异常");
e.printStackTrace();
}
return entityStr; } }
调用GET方法类
package com.HttpClient.Test; import java.net.URISyntaxException;
import java.util.ArrayList;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.testng.annotations.Test; public class HttpClient_case1 { HttpClient_get get = new HttpClient_get();
private String URL = "https://api.apiopen.top/searchMusic";
private String entity;
private ArrayList<NameValuePair> list; @Test
public void test1() throws URISyntaxException {
// 构造list集合
BasicNameValuePair basicNameValuePair = new BasicNameValuePair("name", "十年");
list = new ArrayList<>();
list.add(basicNameValuePair);
// 执行请求,需要传入URL与参数
entity = get.get(URL, list);
System.out.println(entity); } }
HttpClient POST/SET方法的更多相关文章
- UWP 使用Windows.Web.Http命名空间下的HttpClient使用post方法,上传图片服务器
1.从相册里面选取图片 /// <summary> /// 1.1 从相册里面选取图片 /// </summary> /// <param name="send ...
- Android 6.0 SDK 找不到HttpClient的解决方法
一.情况描述 在eclipse或Android Studio开发时(笔者目前只用过Android Studio),设置Android SDK的编译版本为23时,且使用了httpClient相关类的库项 ...
- Android HttpClient基本使用方法
GET 方式 //先将参数放入List,再对参数进行URL编码 List<BasicNameValuePair> params = new LinkedList<BasicNameV ...
- HttpClient的使用方法
使用httpClient发送请求.接收响应很简单.一般需要以下几个步骤. 第一:创建HttpClient对象: 第二:创建请求方法的实例,并指定请求URL.如果要发送GET请求,创建HttpGet对象 ...
- HttpClient 模拟发送Post和Get请求 并用fastjson对返回json字符串数据解析,和HttpClient一些参数方法的deprecated(弃用)的综合总结
最近在做一个接口调用的时候用到Apache的httpclient时候,发现引入最新版本4.5,DefaultHttpClient等老版本常用的类已经过时了,不推荐使用了:去官网看了一下在4.3之后就抛 ...
- httpClient的post方法使用form格式数据调用接口
Http使用post调用接口,接口只接受form表单数据格式问题? 这个问题的关键是form表单提交的是数据格式是什么样子的,使用httpClient工具类时Header信息如何写. 会影响解决问题思 ...
- Apache httpclient的execute方法调试
因为工作需要,想研究一下execute执行的逻辑. 在这一行调用execute: response = getHttpClient().execute(get); getHttpClient的实现: ...
- Httpclient 表单,json,multipart/form-data 提交 ---总结常用的方法
最近在项目中,一直在使用HttpClient 中的方法,这里我进行一些方法的汇总,也是结合了一些大牛写的代码,以备不时之需 官话:HttpClient 是Apache Jakarta Common 下 ...
- .netcore 3.1高性能微服务架构:封装调用外部服务的接口方法--HttpClient客户端思路分析
众所周知,微服务架构是由一众微服务组成,项目中调用其他微服务接口更是常见的操作.为了便于调用外部接口,我们的常用思路一般都是封装一个外部接口的客户端,使用时候直接调用相应的方法.webservice或 ...
随机推荐
- Go-back-N Implementation of reliable data transport (RDT)
[Author] @ Yubao Liu Tables 1.Overview 2.Design explanation 2.1Implemented Routines 2.2Called Routin ...
- Chrome插件开发(二)
作为一个前端开发者,我们经常需要和各种各样的接口打交道,很多时候我们的开发环境的域和接口所在的域是不同的,比如我们本地开发环境运行域是localhost,但接口所在的域是www.xx.com,这个时候 ...
- c++数据结构随笔(1)
创建数据结构单链表的时候,突然碰到基础不牢固的问题,指针问题.就当复习指针了. 问题是如果三个指针a和b和r, b=a; b->next = r; 那么a->next会不会变? 然后写了一 ...
- MIT线性代数:1.方程组的几何解析
- [2018-06-27] virtualenv
在开发Python应用程序的时候,系统安装的Python只有一个版本:3.4.所有第三方的包都会被pip安装到Python3的site-packages目录下. 如果我们要同时开发多个应用程序,那这些 ...
- NOIP模拟 24
连续爆炸的开端. 从这一场开始我没状态了 T1 star way to heaven 受强降雨boboQQQ影响,我一直认为这是一道和凸包有关的计算几何题 很快就弃了,除了期望没做过带实数的题,所以吓 ...
- 关于一道你们眼中的水题 Windy数 的乱写(数位dp)
啊一道水题有什么好说的 上课听不懂,下课泪两行. 有的人什么套路都会,我.. 只能可怜巴巴的抄代码,然后自己总结,顺(zhu)便(yao)颓博客 1.递推dp的思路做到一半死了,怎么也想不出来如何处理 ...
- 手机信号G、E、O、3G代表什么意思?
G指GPRS,是2.5G网络,属于GSM网络,也就是说这项技术位于第二代(2G)和第三代(3G)移动通讯技术之间,GPRS的传输速率可提升至56甚至114Kbps,已经将2017年确定为关闭GSM网络 ...
- 1.基础篇之vue入门
为了建立高效团队,很多公司会采用全栈工程师,虽然利弊兼有,对于成本优先的创业团队,肯定是首选,特别是对.net生态圈,大部分都是小公司,就更加重要了.这里记录的是对vue的学习点滴,希望对你有所助力. ...
- request爬虫通用的小技巧
嵩天老师一直强调的通用代码框架,这个框架可以用在很多爬虫中用来获取HTML文本,并且它通过response.raise_for_status()方法判断返回的状态码是不是200,如果不是,就会引发HT ...