JAVA发送http get/post请求,调用http接口、方法详解

三个例子 —JAVA发送http get/post请求,调用http接口、方法

例1:使用 HttpClient (commons-httpclient-3.0.jar
jar下载地址:http://xiazai.jb51.net/201904/yuanma/commons-httpclient-3.0.rar

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;

public class HttpTool {

 /**
  * 发送post请求
  *
  * @author Michael -----CSDN: http://blog.csdn.net/capmiachael
  * @param params
  *   参数
  * @param requestUrl
  *   请求地址
  * @param authorization
  *   授权书
  * @return 返回结果
  * @throws IOException
  */
 public static String sendPost(String params, String requestUrl,
   String authorization) throws IOException {

  byte[] requestBytes = params.getBytes("utf-8"); // 将参数转为二进制流
  HttpClient httpClient = new HttpClient();// 客户端实例化
  PostMethod postMethod = new PostMethod(requestUrl);
  //设置请求头Authorization
  postMethod.setRequestHeader("Authorization", "Basic " + authorization);
  // 设置请求头 Content-Type
  postMethod.setRequestHeader("Content-Type", "application/json");
  InputStream inputStream = new ByteArrayInputStream(requestBytes, 0,
    requestBytes.length);
  RequestEntity requestEntity = new InputStreamRequestEntity(inputStream,
    requestBytes.length, "application/json; charset=utf-8"); // 请求体
  postMethod.setRequestEntity(requestEntity);
  httpClient.executeMethod(postMethod);// 执行请求
  InputStream soapResponseStream = postMethod.getResponseBodyAsStream();// 获取返回的流
  byte[] datas = null;
  try {
   datas = readInputStream(soapResponseStream);// 从输入流中读取数据
  } catch (Exception e) {
   e.printStackTrace();
  }
  String result = new String(datas, "UTF-8");// 将二进制流转为String
  // 打印返回结果
  // System.out.println(result);

  return result;

 }

 /**
  * 从输入流中读取数据
  *
  * @param inStream
  * @return
  * @throws Exception
  */
 public static byte[] readInputStream(InputStream inStream) throws Exception {
  ByteArrayOutputStream outStream = new ByteArrayOutputStream();
  byte[] buffer = new byte[1024];
  int len = 0;
  while ((len = inStream.read(buffer)) != -1) {
   outStream.write(buffer, 0, len);
  }
  byte[] data = outStream.toByteArray();
  outStream.close();
  inStream.close();
  return data;
 }
}

例2:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;

/**
 * Http请求工具类
 * @author snowfigure
 * @since 2014-8-24 13:30:56
 * @version v1.0.1
 */
public class HttpRequestUtil {
 static boolean proxySet = false;
 static String proxyHost = "127.0.0.1";
 static int proxyPort = 8087;
 /**
  * 编码
  * @param source
  * @return
  */
 public static String urlEncode(String source,String encode) {
  String result = source;
  try {
   result = java.net.URLEncoder.encode(source,encode);
  } catch (UnsupportedEncodingException e) {
   e.printStackTrace();
   return "0";
  }
  return result;
 }
 public static String urlEncodeGBK(String source) {
  String result = source;
  try {
   result = java.net.URLEncoder.encode(source,"GBK");
  } catch (UnsupportedEncodingException e) {
   e.printStackTrace();
   return "0";
  }
  return result;
 }
 /**
  * 发起http请求获取返回结果
  * @param req_url 请求地址
  * @return
  */
 public static String httpRequest(String req_url) {
  StringBuffer buffer = new StringBuffer();
  try {
   URL url = new URL(req_url);
   HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection(); 

   httpUrlConn.setDoOutput(false);
   httpUrlConn.setDoInput(true);
   httpUrlConn.setUseCaches(false); 

   httpUrlConn.setRequestMethod("GET");
   httpUrlConn.connect(); 

   // 将返回的输入流转换成字符串
   InputStream inputStream = httpUrlConn.getInputStream();
   InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
   BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 

   String str = null;
   while ((str = bufferedReader.readLine()) != null) {
    buffer.append(str);
   }
   bufferedReader.close();
   inputStreamReader.close();
   // 释放资源
   inputStream.close();
   inputStream = null;
   httpUrlConn.disconnect(); 

  } catch (Exception e) {
   System.out.println(e.getStackTrace());
  }
  return buffer.toString();
 } 

 /**
  * 发送http请求取得返回的输入流
  * @param requestUrl 请求地址
  * @return InputStream
  */
 public static InputStream httpRequestIO(String requestUrl) {
  InputStream inputStream = null;
  try {
   URL url = new URL(requestUrl);
   HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();
   httpUrlConn.setDoInput(true);
   httpUrlConn.setRequestMethod("GET");
   httpUrlConn.connect();
   // 获得返回的输入流
   inputStream = httpUrlConn.getInputStream();
  } catch (Exception e) {
   e.printStackTrace();
  }
  return inputStream;
 }

 /**
  * 向指定URL发送GET方法的请求
  *
  * @param url
  *   发送请求的URL
  * @param param
  *   请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
  * @return URL 所代表远程资源的响应结果
  */
 public static String sendGet(String url, String param) {
  String result = "";
  BufferedReader in = null;
  try {
   String urlNameString = url + "?" + param;
   URL realUrl = new URL(urlNameString);
   // 打开和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();
   // 获取所有响应头字段
   Map<String, List<String>> map = connection.getHeaderFields();
   // 遍历所有的响应头字段
   for (String key : map.keySet()) {
    System.out.println(key + "--->" + map.get(key));
   }
   // 定义 BufferedReader输入流来读取URL的响应
   in = new BufferedReader(new InputStreamReader(
     connection.getInputStream()));
   String line;
   while ((line = in.readLine()) != null) {
    result += line;
   }
  } catch (Exception e) {
   System.out.println("发送GET请求出现异常!" + e);
   e.printStackTrace();
  }
  // 使用finally块来关闭输入流
  finally {
   try {
    if (in != null) {
     in.close();
    }
   } catch (Exception e2) {
    e2.printStackTrace();
   }
  }
  return result;
 }

 /**
  * 向指定 URL 发送POST方法的请求
  *
  * @param url
  *   发送请求的 URL
  * @param param
  *   请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
  * @param isproxy
  *    是否使用代理模式
  * @return 所代表远程资源的响应结果
  */
 public static String sendPost(String url, String param,boolean isproxy) {
  OutputStreamWriter out = null;
  BufferedReader in = null;
  String result = "";
  try {
   URL realUrl = new URL(url);
   HttpURLConnection conn = null;
   if(isproxy){//使用代理模式
    @SuppressWarnings("static-access")
    Proxy proxy = new Proxy(Proxy.Type.DIRECT.HTTP, new InetSocketAddress(proxyHost, proxyPort));
    conn = (HttpURLConnection) realUrl.openConnection(proxy);
   }else{
    conn = (HttpURLConnection) realUrl.openConnection();
   }
   // 打开和URL之间的连接

   // 发送POST请求必须设置如下两行
   conn.setDoOutput(true);
   conn.setDoInput(true);
   conn.setRequestMethod("POST"); // POST方法

   // 设置通用的请求属性

   conn.setRequestProperty("accept", "*/*");
   conn.setRequestProperty("connection", "Keep-Alive");
   conn.setRequestProperty("user-agent",
     "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
   conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

   conn.connect();

   // 获取URLConnection对象对应的输出流
   out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
   // 发送请求参数
   out.write(param);
   // flush输出流的缓冲
   out.flush();
   // 定义BufferedReader输入流来读取URL的响应
   in = new BufferedReader(
     new InputStreamReader(conn.getInputStream()));
   String line;
   while ((line = in.readLine()) != null) {
    result += line;
   }
  } catch (Exception e) {
   System.out.println("发送 POST 请求出现异常!"+e);
   e.printStackTrace();
  }
  //使用finally块来关闭输出流、输入流
  finally{
   try{
    if(out!=null){
     out.close();
    }
    if(in!=null){
     in.close();
    }
   }
   catch(IOException ex){
    ex.printStackTrace();
   }
  }
  return result;
 } 

 public static void main(String[] args) {
  //demo:代理访问
  String url = "http://api.adf.ly/api.php";
  String para = "key=youkeyid&youuid=uid&advert_type=int&domain=adf.ly&url=http://somewebsite.com";

  String sr=HttpRequestUtil.sendPost(url,para,true);
  System.out.println(sr);
 }

}

例3

/**
  * 发送Http post请求
  *
  * @param xmlInfo
  *   json转化成的字符串
  * @param URL
  *   请求url
  * @return 返回信息
  */
 public static String doHttpPost(String xmlInfo, String URL) {
  System.out.println("发起的数据:" + xmlInfo);
  byte[] xmlData = xmlInfo.getBytes();
  InputStream instr = null;
  java.io.ByteArrayOutputStream out = null;
  try {
   URL url = new URL(URL);
   URLConnection urlCon = url.openConnection();
   urlCon.setDoOutput(true);
   urlCon.setDoInput(true);
   urlCon.setUseCaches(false);
   urlCon.setRequestProperty("content-Type", "application/json");
   urlCon.setRequestProperty("charset", "utf-8");
   urlCon.setRequestProperty("Content-length",
     String.valueOf(xmlData.length));
   System.out.println(String.valueOf(xmlData.length));
   DataOutputStream printout = new DataOutputStream(
     urlCon.getOutputStream());
   printout.write(xmlData);
   printout.flush();
   printout.close();
   instr = urlCon.getInputStream();
   byte[] bis = IOUtils.toByteArray(instr);
   String ResponseString = new String(bis, "UTF-8");
   if ((ResponseString == null) || ("".equals(ResponseString.trim()))) {
    System.out.println("返回空");
   }
   System.out.println("返回数据为:" + ResponseString);
   return ResponseString;

  } catch (Exception e) {
   e.printStackTrace();
   return "0";
  } finally {
   try {
    out.close();
    instr.close();

   } catch (Exception ex) {
    return "0";
   }
  }
 }

以上所述是小编给大家介绍的Java发送http get/post请求调用接口/方法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • 详解JAVA中的Collection接口和其主要实现的类

    Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的元素而另一些不行.一些能排序而另一些不行.Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的"子接口"如List和Set,详细信息可见官方文档http://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/

  • java接口私有方法实现过程解析

    这篇文章主要介绍了java接口私有方法实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 问题描述: 我们需要抽取一个共有方法,用来解决两个默认方法之间重复代码的问题 但是这个共有方法不应该让实现类使用,应该是私有化的. 解决方案: 从java 9开始,接口当中允许定义私有方法. 1.普通私有方法,解决多个默认方法之间重复代码问题 格式: private 返回值类型方法名称(参数列表){ 方法体 } 2.静态私有方法,解决多个静态方法之

  • Java如何在沙箱环境中测试支付宝支付接口

    java沙箱环境测试支付宝支付接口? 准备工作,登陆支付宝开放平台,进入沙箱环境 开放平台链接:https://developers.alipay.com/platform/developerIndex.htm 沙箱环境中给测试提供了一些必要和非必要的参数,需要自己动手修改的只有RSA密钥,需要通过支付宝提供的开发工具生成RSA密钥,下载链接:https://docs.open.alipay.com/291/105971#LDsXr 下载完成安装之后,可以生成RSA密钥.生成的密钥分为应用公钥,

  • 微信公众平台 客服接口发消息的实现代码(Java接口开发)

    微信公众平台技术文档:客服消息 一.接口说明 当用户和公众号产生特定动作的交互时(具体动作列表请见下方说明),微信将会把消息数据推送给开发者,开发者可以在一段时间内(目前修改为48小时)调用客服接口,通过POST一个JSON数据包来发送消息给普通用户.此接口主要用于客服等有人工消息处理环节的功能,方便开发者为用户提供更加优质的服务. 目前允许的动作列表如下(公众平台会根据运营情况更新该列表,不同动作触发后,允许的客服接口下发消息条数不同,下发条数达到上限后,会遇到错误返回码,具体请见返回码说明页

  • Java调用第三方接口示范的实现

    在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口. 使用流程 [1]准备工作:在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的restTemplate来调用,上面有调用接口的方法[分为Get和Post方式的有参和无参调用]: package com.njsc.credit.util; import java.io.IOException; import java.net.URI; import java.util.ArrayL

  • java中的接口能够被实例化吗

    写在前面的话 学习java这么久了,好像已经习惯了new对象,平时new对象主角是类(class).乍一听对接口(interface)实例化,这这这可能吗,怕不是疯了!下文首先通过在IDEA中编写代码演示说明,然后分析怎样操作才能对接口进行实例化.希望博主的博文能够对java学习道路上的你有所帮助,喜欢的话点赞留言收藏哦~ 1.在IDEA中进行代码演示 直接用平时new类(class)对象的方式对接口进行操作,达不到效果,IDEA提示:Runnable' is abstract; cannot

  • java如何写接口给别人调用的示例代码

    计算机语言分类有很多,如C.C++.C#.Java.Php.Python等等,她们有各自的特性及擅长的领域,但她们各自又不是全能的.在一个稍微大型一点的项目都会用到多种语言共同完成,那么这些编程语言如何进行通信呢.什么意思呢,就是比如说我Java写的一个方法,其他编程语言要怎么去调用呢?这就是本文要探讨的问题了. 一般来说,方法层面的编程语言通信用的是网络接口形式,只暴露出形参和结果供别人调用.接口一般分为接口定义者和接口调用者,定义者可以规定接收参数的类型及返回形式,而接口定义者则只能完全按照

  • 微信公众平台 发送模板消息(Java接口开发)

    前言:最近一直再弄微信扫码推送图文消息和模板消息发送,感觉学习到了不少东西.今天先总结一下微信公众平台模板消息的发送.因为这个自己弄了很久,开始很多地方不明白,所以今天好好总结一下. 微信公众平台技术文档:模板消息接口 一.概述 模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等.不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息. 关于使用规则,请注意: 1.所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入

  • Java中使用JWT生成Token进行接口鉴权实现方法

    先介绍下利用JWT进行鉴权的思路: 1.用户发起登录请求. 2.服务端创建一个加密后的JWT信息,作为Token返回. 3.在后续请求中JWT信息作为请求头,发给服务端. 4.服务端拿到JWT之后进行解密,正确解密表示此次请求合法,验证通过:解密失败说明Token无效或者已过期. 流程图如下: 一.用户发起登录请求 二.服务端创建一个加密后的JWT信息,作为Token返回 1.用户登录之后把生成的Token返回给前端 @Authorization @ResponseBody @GetMappin

  • 关于java中可变长参数的定义及使用方法详解

    JAVA中可以为方法定义可变长参数( Varargs)来匹配不确定数量的多个参数,其定义用"..."表示.其实,这类似于为方法传了一个数组,且在使用方法上也和数组相同,如下: public void test(String... str){ for(String s : str){ } } 调用方法就像普通的调用方式相同,只不过可以匹配的参数为0到多个.如下: test(); test("lilei"); test("lilei","h

  • Java比较两个对象大小的三种方法详解

    目录 一. 为什么需要比较对象 二. 元素的比较 1. 基本类型的比较 2. 引用类型的比较 三. 对象比较的方法 1. equals方法比较 2. 基于Comparable接口的比较 3. 基于Comparator接口的比较 4. 三种比较方式对比 一. 为什么需要比较对象 上一节介绍了优先级队列,在优先级队列中插入的元素必须能比较大小,如果不能比较大小,如插入两个学生类型的元素,会报ClassCastException异常 示例: class Student{ String name; in

  • Java实现大文件的分割与合并的方法详解

    目录 一.题目描述-合并多个文本文件 1.题目 2.解题思路 3.代码详解 二.题目描述-对大文件进行分割处理 1.题目 2.解题思路 3.代码详解 三.题目描述-分割后又再次合并 1.题目 2.解题思路 3.代码详解 4.多学一个知识点 一.题目描述-合并多个文本文件 1.题目 题目:做一个合并多个文本文件的工具. 2.解题思路 创建一个类:TextFileConcatenation 使用TextFileConcatenation继承JFrame构建窗体 读取文本文件时,用的是Buffered

  • Java微服务实战项目尚融宝接口创建详解

    目录 需求 一.创建父工程srb 二.创建模块guigu-common 1.创建Maven模块 2.配置pom 三.创建模块service-base 1.创建Maven模块 2.配置pom 四.创建模块service-core 1.创建Maven模块 2.配置pom 五.代码生成器 1.创建数据库 2.创建代码生成器 六.启动应用程序 1.创建application.yml 2.创建SpringBoot配置文件 3.创建SpringBoot启动类 需求 积分等级CRUD列表和表单 一.创建父工程

  • 使用Java构造和解析Json数据的两种方法(详解二)

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包. 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Json数据的方法

  • 使用Java构造和解析Json数据的两种方法(详解一)

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包. 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Json数据的方法

  • Java 通过手写分布式雪花SnowFlake生成ID方法详解

    目录 SnowFlake算法 SnowFlake优点: SnowFlake算法 SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图: 分为四段: 第一段: 1位为未使用,永远固定为0. (因为二进制中最高位是符号位,1表示负数,0表示正数.生成的id一般都是用正整数,所以最高位固定为0 ) 第二段: 41位为毫秒级时间(41位的长度可以使用69年) 第三段: 10位为workerId(10位的长度最多支持部署1024个节点) (这里的10位又分为两部分,第一部分5位表

  • Java 通过手写分布式雪花SnowFlake生成ID方法详解

    目录 SnowFlake算法 SnowFlake优点 SnowFlake不足 SnowFlake算法 SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图: 分为四段: 第一段: 1位为未使用,永远固定为0. (因为二进制中最高位是符号位,1表示负数,0表示正数.生成的id一般都是用正整数,所以最高位固定为0 ) 第二段: 41位为毫秒级时间(41位的长度可以使用69年) 第三段: 10位为workerId(10位的长度最多支持部署1024个节点) (这里的10位又分为

  • Java实现添加,读取和删除Excel图片的方法详解

    目录 介绍 Java 代码示例 示例1添加图片 示例2读取图片 示例3删除图片 介绍 本文介绍在Java程序中如何添加图片到excel表格,添加图片时可设置图片大小.位置.旋转.超链接.可选文本等,以及如何读取.删除excel表格中已有的图片. 工具:Free Spire.XLS for Java (免费版) 注:可通过官网下载包,并解压将lib文件夹下的jar文件导入java程序:或者通过maven仓库下载导入. Jar导入效果: Java 代码示例 示例1添加图片 import com.sp

  • Java如何提供给第三方使用接口方法详解

    目录 前言 接口Controller 接口幂等性校验 实现类ServiceImpl 第三方调用接口Api实现类 生成签名工具类 HttpCilent工具类 附:分享一个获取IP工具类 总结 前言 相信有很多小伙伴,在日常的开发中都有遇到过需要调用第三方接口的需求吧,但是自己有没有写过接口提供给第三方使用呢,常规的都是我们调用别人的接口,但是自己需要开发接口提供给第三方使用的场景应该不是很多,很多小伙伴可能会想不就开发一个接口对外开放嘛岂不是很简单,但是在开发接口对外开放,我们需要考虑一个问题,没

随机推荐