java通过java.net.URL发送http请求调用接口
一般在*.html,*.jsp页面中我们通过使用ajax调用接口,这个是我们通常用的。对于这些接口,大都是本公司写的接口供自己调用,所以直接用ajax就可以。但是,如果是多家公司共同开发一个东西,一个功能可能要调多个接口,一两个ajax可以在jsp页面上显示,但是如果多了,就不能写这么多ajax在前端了。这时候需要封装一成一个接口,在接口里面如何调用其他接口呢?这就用到了java.net.URL这个类。
java.net.URL用法如下
BufferedReader in=null;
java.net.HttpURLConnection conn=null;
String msg = "";// 保存调用http服务后的响应信息
try
{
//实例化url
java.net.URL url = new java.net.URL(path);
//根据url获取HttpURLConnection
conn = (java.net.HttpURLConnection) url.openConnection();
//设置请求的参数
conn.setRequestMethod("POST");
conn.setConnectTimeout(5 * 1000);// 设置连接超时时间为5秒
conn.setReadTimeout(20 * 1000);// 设置读取超时时间为20秒
conn.setDoOutput(true); // 使用 URL 连接进行输出,则将 DoOutput标志设置为 true
conn.setDoInput(true);
conn.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
//conn.setRequestProperty("Content-Encoding","gzip");
conn.setRequestProperty("Content-Length", String.valueOf(params.length())); //设置请求内容(长度)长度
OutputStream outStream = conn.getOutputStream(); // 返回写入到此连接的输出流
outStream.write(params.getBytes()); //将参数写入流中
outStream.close();//关闭流 if (conn.getResponseCode() == 200) {
// HTTP服务端返回的编码是UTF-8,故必须设置为UTF-8,保持编码统一,否则会出现中文乱码
in = new BufferedReader(new InputStreamReader((InputStream) conn.getInputStream(), "UTF-8"));
msg = in.readLine();
}
}catch(Exception ex)
{
ex.printStackTrace();
}finally
{
if(null!=in)
{
in.close();
}
if(null!=conn)
{
conn.disconnect();
}
}
return msg;
HttpUtil工具类
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; import java.net.HttpURLConnection;
import java.net.URL; /**
* http工具
*
*/
public final class HttpUtil {
/**
* 模拟http协议发送get请求
**/
public static String sendGetRequest(String url) {
String result = "";
InputStream in = null; HttpURLConnection connection = null; try {
URL httpUrl = new URL(url);
connection = (HttpURLConnection) httpUrl.openConnection();
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("Charset", "UTF-8");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
connection.setRequestMethod("GET");
connection.connect(); if (connection.getResponseCode() == 200) {
in = connection.getInputStream(); ByteArrayOutputStream bs = new ByteArrayOutputStream();
int n = 0;
byte[] datas = new byte[2048]; while ((n = in.read(datas)) != -1) {
bs.write(datas, 0, n);
} bs.flush();
result = new String(bs.toByteArray(), "utf-8");
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e) {
e.printStackTrace();
} try {
connection.disconnect();
} catch (Exception ex) {
}
} return result;
} /**
* 模拟http协议发送post请求
**/
public static String sendPostRequest(String url, String param) {
InputStream in = null;
String result = "";
HttpURLConnection connection = null; try {
URL httpUrl = new URL(url);
connection = (HttpURLConnection) httpUrl.openConnection();
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("Charset", "UTF-8");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
connection.getOutputStream().write(param.getBytes("utf-8"));
connection.getOutputStream().flush(); if (connection.getResponseCode() == 200) {
in = connection.getInputStream(); ByteArrayOutputStream bs = new ByteArrayOutputStream();
int n = 0;
byte[] datas = new byte[2048]; while ((n = in.read(datas)) != -1) {
bs.write(datas, 0, n);
} bs.flush();
result = new String(bs.toByteArray(), "utf-8");
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
} try {
connection.disconnect();
} catch (Exception ex) {
}
} return result;
} /**
* 普通post文件上传
*/
public static String upLoadAttachment(String url, String fileName, File file) {
String result = null; HttpURLConnection connection = null;
BufferedReader reader = null; try {
URL httpUrl = new URL(url);
connection = (HttpURLConnection) httpUrl.openConnection();
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("Charset", "UTF-8");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
connection.setRequestMethod("POST");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false); String bound = "----------" + System.currentTimeMillis();
connection.setRequestProperty("Content-Type",
"multipart/form-data; boundary=" + bound); StringBuilder sb = new StringBuilder();
sb.append("--");
sb.append(bound);
sb.append("\r\n");
sb.append("Content-Disposition: form-data;name=\"" + fileName +
"\";filename=\"" + file.getName() + "\"\r\n");
sb.append("Content-Type:application/octet-stream\r\n\r\n"); byte[] data = sb.toString().getBytes("utf-8");
OutputStream out = new DataOutputStream(connection.getOutputStream());
out.write(data); DataInputStream in = new DataInputStream(new FileInputStream(file));
int bytes = 0;
byte[] bufferOut = new byte[1024]; while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
} in.close(); byte[] foot = ("\r\n--" + bound + "--\r\n").getBytes("utf-8"); // 定义最后数据分隔线
out.write(foot);
out.flush();
out.close(); InputStream inn = connection.getInputStream();
ByteArrayOutputStream bs = new ByteArrayOutputStream();
int n = 0;
byte[] datas = new byte[2048]; while ((n = inn.read(datas)) != -1) {
bs.write(datas, 0, n);
} bs.flush();
result = new String(bs.toByteArray(), "utf-8"); return result;
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
connection.disconnect();
} catch (Exception ex) {
}
} return null;
} /**
* post文件上传 - 使用InputStream输入流(例如MultipartFile从前端获取文件后转发给其他的服务器)
*/
public static String upLoadAttachment(String url,String keyName, String fileName, InputStream fins) {
String result = null; HttpURLConnection connection = null;
BufferedReader reader = null; try {
URL httpUrl = new URL(url);
connection = (HttpURLConnection) httpUrl.openConnection();
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("Charset", "UTF-8");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
connection.setRequestMethod("POST");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false); String bound = "----------" + System.currentTimeMillis();
connection.setRequestProperty("Content-Type",
"multipart/form-data; boundary=" + bound); StringBuilder sb = new StringBuilder();
sb.append("--");
sb.append(bound);
sb.append("\r\n");
sb.append("Content-Disposition: form-data;name=\"" + keyName +
"\";filename=\"" + fileName + "\"\r\n");
sb.append("Content-Type:application/octet-stream\r\n\r\n"); byte[] data = sb.toString().getBytes("utf-8");
OutputStream out = new DataOutputStream(connection.getOutputStream());
out.write(data); DataInputStream in = new DataInputStream(fins);
int bytes = 0;
byte[] bufferOut = new byte[1024]; while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
} in.close(); byte[] foot = ("\r\n--" + bound + "--\r\n").getBytes("utf-8"); // 定义最后数据分隔线
out.write(foot);
out.flush();
out.close(); InputStream inn = connection.getInputStream();
ByteArrayOutputStream bs = new ByteArrayOutputStream();
int n = 0;
byte[] datas = new byte[2048]; while ((n = inn.read(datas)) != -1) {
bs.write(datas, 0, n);
} bs.flush();
result = new String(bs.toByteArray(), "utf-8"); return result;
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
connection.disconnect();
} catch (Exception ex) {
}
} return null;
}
}
java通过java.net.URL发送http请求调用接口的更多相关文章
- Java发布webservice应用并发送SOAP请求调用
webservice框架有很多,比如axis.axis2.cxf.xFire等等,做服务端和做客户端都可行,个人感觉使用这些框架的好处是减少了对于接口信息的解析,最主要的是减少了对于传递于网络中XML ...
- JAVA使用apache http组件发送POST请求
在上一篇文章中,使用了JDK中原始的HttpURLConnection向指定URL发送POST请求 可以看到编码量有些大,并且使用了输入输出流 传递的参数还是用“name=XXX”这种硬编的字符串进行 ...
- python接口自动化(八)--发送post请求的接口(详解)
简介 上篇介绍完发送get请求的接口,大家必然联想到发送post请求的接口也不会太难,被聪明的你又猜到了.答案是对的,虽然发送post请求的参考例子很简单,但是实际遇到的情况却是很复杂的,因为所有系统 ...
- 发送post请求的接口
一.简介 所有系统或者软件.网站都是从登录开始,所以首先介绍的第一个post请求是登录. 二.help函数 学习一个新的模块捷径,直接用help()函数查看相关注释和案例内容 for example: ...
- Hbuilder MUI里面使用java.net.URL发送网络请求,操作cookie
1. 引入所需网络请求类: var URL = plus.android.importClass("java.net.URL"); var URLConnection = plus ...
- 【JAVA】通过URLConnection/HttpURLConnection发送HTTP请求的方法(一)
Java原生的API可用于发送HTTP请求 即java.net.URL.java.net.URLConnection,JDK自带的类: 1.通过统一资源定位器(java.net.URL)获取连接器(j ...
- 向指定URL 发送POST请求的方法
java发送psot请求: package com.tea.web.admin; import java.io.BufferedReader; import java.io.IOException; ...
- java编程(2)——servlet和Ajax异步请求的接口编程(有调用数据库的数据)
第一步: 1.为项目配置 Tomcat 为 server: 2.导入 mysql的jar包 到项目目录中: 第二步:编码 1.数据库连接类ConnectMysql.java代码: package co ...
- 对WEB url 发送POST请求
package com.excellence.spark; import java.util.List; import com.excellence.spark.test.test; import c ...
随机推荐
- Python3 简明教程
Python是由吉多·范罗苏姆(Guido Van Rossum)在90年代早期设计.它是如今最常用的编程 语言之一.它的语法简洁且优美,几乎就是可执行的伪代码. 注意:这篇教程是特别为Python3 ...
- linux常用命令:gzip 命令
减 少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间.gzip是在Linux系统中经常使用的一个对文件进 行压缩和解压缩的命令,既方便又好用.gzip不仅可 ...
- Linux服务器---安装squid
安装squid proxy就是软件代理或者代理服务器,而squid就是一种常用的proxy服务 1.安装squid [root@localhost wj]# rpm -qa | grep squid ...
- Python Web学习笔记之图解TCP/IP协议和浅析算法
本文通过两个图来梳理TCP-IP协议相关知识.TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道.如图1所示,给出了TCP通信过程的示意图. 图1主要包括三部分:建立连接.传 ...
- $.post 和 $.get 设置同步和异步请求
由于$.post() 和 $.get() 默认是 异步请求,如果需要同步请求,则可以进行如下使用:在$.post()前把ajax设置为同步:$.ajaxSettings.async = false;在 ...
- c++中类似于java jprofiler/eclispe memoryanalysis的性能以及内存分析工具
visual studio有自带的,可以看MSDN,不过一般来说,我们比较关注linux下的,搜了下,比较好用的应该有gprof和valgrind,先记录,可参考如下: http://blog.csd ...
- 微信小程序编写新闻阅读列表
微信小程序编写新闻阅读列表 不忘初心,方得始终:初心易得,始终难守. 本篇学习主要内容 Swiper 组件(轮播图) App.json 里的关于导航栏.标题的配置. Page 页面与应用程序的生命周期 ...
- 20145326蔡馨熠《网络对抗》shellcode注入&Return-to-libc攻击深入
20145326蔡馨熠<网络对抗>shellcode注入&Return-to-libc攻击深入 准备一段shellcode 首先我们应该知道,到底什么是shellcode.经过上网 ...
- tensorflow reduction_indices理解
在tensorflow的使用中,经常会使用tf.reduce_mean,tf.reduce_sum等函数,在函数中,有一个reduction_indices参数,表示函数的处理维度,直接上图,一目了然 ...
- [c/c++]指针(2)
首先呢,讲讲数组 数组就是一连串的地址对不对?所以它们的地址是紧挨着的 1 | 2 | 3 | 4 | 2 | 0 1 2 3 4 那我们把一个数组的首地址赋给一个指针变量 ] = {, , , , ...