java发起http请求调用post与get接口的方法实例
作者:GAo_ei 发布时间:2022-12-28 23:22:58
标签:http请求,get,post
一、java调用post接口
1、使用URLConnection或者HttpURLConnection
java自带的,无需下载其他jar包
URLConnection方式调用,如果接口响应码被服务端修改则无法接收到返回报文,只能当响应码正确时才能接收到返回
public static String sendPost(String url, String param) {
OutputStreamWriter out = null;
BufferedReader in = null;
StringBuilder result = new StringBuilder("");
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("Content-Type","application/json;charset=UTF-8");
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
// 发送请求参数
out.write(param);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
String line;
while ((line = in.readLine()) != null) {
result.append(line);
}
} catch (Exception e) {
System.out.println("发送 POST 请求出现异常!"+e);
e.printStackTrace();
}
//使用finally块来关闭输出流、输入流
finally{
if(out!=null){ try { out.close(); }catch(Exception ex){} }
if(in!=null){ try { in.close(); }catch(Exception ex){} }
}
return result.toString();
}
HttpURLConnection方式调用
//ms超时毫秒,url地址,json入参
public static String httpJson(int ms,String url,String json) throws Exception{
String err = "00", line = null;
StringBuilder sb = new StringBuilder();
HttpURLConnection conn = null;
BufferedWriter out = null;
BufferedReader in = null;
try{
conn = (HttpURLConnection) (new URL(url.replaceAll("/","/"))).openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setConnectTimeout(ms);
conn.setReadTimeout(ms);
conn.setRequestProperty("Content-Type","application/json;charset=utf-8");
conn.connect();
out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream(),"utf-8"));
out.write(new String(json.getBytes(), "utf-8"));
out.flush();//发送参数
int code = conn.getResponseCode();
if (conn.getResponseCode()==200){
in = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
while ((line=in.readLine())!=null)
sb.append(line);
}//接收返回值
}catch(Exception ex){
err=ex.getMessage();
}
try{ if (out!=null) out.close(); }catch(Exception ex){};
try{ if (in!=null) in.close(); }catch(Exception ex){};
try{ if (conn!=null) conn.disconnect();}catch(Exception ex){}
if (!err.equals("00")) throw new Exception(err);
return sb.toString();
}
2、使用CloseableHttpClient
使用的jar包
<dependency>
<groupId>com.alibaba.csb.sdk</groupId>
<artifactId>http-client</artifactId>
<version>1.1.5.1</version>
</dependency>
public static String httpPostJson(String url,String json) throws Exception{
String data="";
CloseableHttpClient httpClient = null;
CloseableHttpResponse response = null;
try {
httpClient = HttpClients.createDefault();
HttpPost httppost = new HttpPost(url);
httppost.setHeader("Content-Type", "application/json;charset=UTF-8");
StringEntity se = new StringEntity(json,Charset.forName("UTF-8"));
se.setContentType("text/json");
se.setContentEncoding("UTF-8");
httppost.setEntity(se);
response = httpClient.execute(httppost);
int code = response.getStatusLine().getStatusCode();
System.out.println("接口响应码:"+code);
data = EntityUtils.toString(response.getEntity(), "utf-8");
EntityUtils.consume(response.getEntity());
} catch (Exception e) {
e.printStackTrace();
} finally {
if(response!=null){ try{response.close();}catch (IOException e){} }
if(httpClient!=null){ try{httpClient.close();}catch(IOException e){} }
}
return data;
}
3、使用HttpCaller
使用的jar包同第2个中的jar包。
详情可以查看阿里云总线CSB
https://help.aliyun.com/document_detail/148571.html
public static String sendPost(){
String result = "";
HttpParameters.Builder builder = HttpParameters.newBuilder();
builder.requestURL("URL") // 设置请求的URL
.api("api") // 设置服务名
.version("version") // 设置版本号
.method("post") // 设置调用方式, get/post
.accessKey("ak").secretKey("sk"); // 设置accessKey 和 设置secretKey
// 设置请求参数(json格式)
Map<String,String> param = new HashMap<String,String>();
param.put("key1","value1");
param.put("key2","value2");
//加密,没有加密则不需要encryptParam,直接用param
Map<String,String> encryptParam = new HashMap<String,String>();
encryptParam.put("key3", getData(JSON.toJSONString(param)));
ContentBody cb = new ContentBody(JSON.toJSONString(encryptParam));
builder.contentBody(cb);
try {
result = HttpCaller.invoke(builder.build());
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
//自己的加密方式
public static String getData(String data1){
return "加密后的密文";
}
二、java调用get接口
使用java自带的URLConnection
//将map型转为请求参数型
public static String getUrlData(Map<Object, Object> data) throws Exception{
StringBuffer sb = new StringBuffer();
try {
Set<Map.Entry<Object, Object>> entries = data.entrySet();
Iterator<Map.Entry<Object, Object>> iterators = entries.iterator();
while(iterators.hasNext()){
Map.Entry<Object, Object> next = iterators.next();
sb.append(next.getKey().toString().trim()).append("=").append(URLEncoder.encode(next.getValue() + "", "UTF-8").trim()).append("&");
}
sb.deleteCharAt(sb.length() - 1);
} catch (Exception e) {
sb.append(e.toString());
}
return sb.toString();
}
//strUrl截止到?,例:http://127.0.0.1:8080/api/method?
public static String httpGet(String strUrl){
Map<Object, Object> params = new HashMap<Object, Object>();
params.put("key1", "value1");
params.put("key2", "value2");
String url=strUrl + getUrlData(params);
StringBuilder result = new StringBuilder();
BufferedReader in = null;
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立实际的连接
connection.connect();
// 获取所有响应头字段
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8"));
String line;
while ((line = in.readLine()) != null) {
result.append(line);
}
} catch (Exception e) {
System.out.println("发送GET请求出现异常!" + e);
e.printStackTrace();
}
finally {
if (in != null){ try { in.close(); }catch(Exception e2){} }
}
return result.toString();
}
来源:https://blog.csdn.net/G_Aoei/article/details/125168460


猜你喜欢
- 本文实例讲述了C#多线程学习之使用定时器进行多线程的自动管理。分享给大家供大家参考。具体分析如下:Timer类:设置一个定时器,定时执行用户
- 本章主要建立在已经安装好Erlang以及RabbitMQ的基础上,接下来,简单介绍一下使用一、Direct直接模式 通过routingKey
- 在混淆编译之前,我的程序可以正常运行,混淆编译时,报告如下错误: Error:Execution failed for task ‘:gvi
- pom.xml配置<dependency> <groupId>org.springframework.
- 本文通过是 * 实现的AOP功能的封装与配置的小框架.加深对 * 和AOP编程的理解设计根据配置文件的键xxx对应的值(类全名)创建相应
- 首先,看一下效果 可能各位在别处看到过类似的东西,我在微信的文章末尾看到有个玩意,感觉有意思,就用代码实现一下。这篇文章主要把握
- 前言在开发过程中需要快速新建getXXX();setXXX()方法的时候,就会想能否批量实现呢?例如实现如下代码,一次性操作,不是一个一个码
- 本文实例为大家分享了Android TextView实现跑马灯效果的具体代码,供大家参考,具体内容如下当Layout中只有一个TextVie
- 这篇文章主要介绍了JAVA使用 * 对象进行敏感字过滤代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 在上节使用了H2之后感觉很爽,很轻便,正好有个项目要求简单,最好不适用外部数据库,于是就想着把H2数据库集成进来,这个系统已经存在了一个Or
- 实际开发中订单往往都包含着订单状态,用户每进行一次操作都要切换对应的状态,而每次切换判断当前的状态是必须的,就不可避免的引入一系列判断语句,
- 类和结构的区别:1.一个是引用类型一个是值类型Class是引用类型,继承自System.Object类Struct是值类型,继承自Syste
- 对于大文件的处理,无论是用户端还是服务端,如果一次性进行读取发送、接收都是不可取,很容易导致内存问题。所以对于大文件上传,采用切块分段上传,
- 代码编译运行环境:VS2017+Debug+Win32按照参数形式的不同,C++应该有三种函数调用方式:传值调用、引用调用和指针调用。对于基
- 好了下面进入正题,我们先看一下实现效果吧:下面来介绍一下代码: 本思路就是:1.先到手机中扫描jpeg和png的图片2.获取导图片
- 如何创建可以存放各种类型的数组?根据JavaSE的语法知识储备,如果现在让你们创建如标题一样的数组,你会怎么创建呢?答案是:使用 Objec
- mybatis自带对枚举的处理类org.apache.ibatis.type.EnumOrdinalTypeHandler<E>
- Mybatis-Plus是一个优秀的Mybatis增强工具,目前更新到3.1.1。Mybatis-Plus原生提供了很多单表操作的方法,极大
- 本文实例为大家分享了C#实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下之前一直想写一个贪吃蛇小游戏,上个周末终于有时间做了一个,现在和
- ssm(spring springMVC mybatis)1.创建项目file->new->project2.新建的maven项