HTTP接口开发专题二(发送http请求的接口工具类)
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry; import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
/**
* Http工具类*/
public class HttpUtils {
/**
* 解析出url参数中的键值对 如 "index.jsp?Action=del&id=123",解析出Action:del,id:123存入map中
*
* @param URL
* url地址
* @return url请求参数部分
*/
public static Map<String, String> URLRequest(String URL) {
Map<String, String> mapRequest = new HashMap<String, String>(); String[] arrSplit = null; String strUrlParam = truncateUrlPage(URL);
if (strUrlParam == null) {
return mapRequest;
}
// 每个键值为一组 www.2cto.com
arrSplit = strUrlParam.split("[&]");
for (String strSplit : arrSplit) {
String[] arrSplitEqual = null;
arrSplitEqual = strSplit.split("[=]"); // 解析出键值
if (arrSplitEqual.length > 1) {
// 正确解析
mapRequest.put(arrSplitEqual[0], arrSplitEqual[1]); } else {
if (arrSplitEqual[0] != "") {
// 只有参数没有值,不加入
mapRequest.put(arrSplitEqual[0], "");
}
}
}
return mapRequest;
} /**
* 发起HTTP POST请求。
* @param urlStr 请求URL
* @param params 请求参数
* @return 响应结果
*/
public static String post(String urlStr, Map<String, Object> params) {
URL url = null;
StringBuffer buff = new StringBuffer(""); HttpURLConnection urlConn = null;
OutputStream out = null;
BufferedReader in = null;
try {
Set<Entry<String, Object>> keySet = params.entrySet(); int i = 0;
//将map参数转换为 key1=value1&key2=value2 的形式
for (Iterator<Entry<String, Object>> iter = keySet.iterator(); iter.hasNext();) {
Entry<String,Object> entry = iter.next();
// 跳过值为null的参数
if(entry.getValue() == null) {
continue;
}
if (i > 0) {
buff.append("&");
}
buff.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue().toString(), "UTF-8"));
i++;
} url = new URL(urlStr);//把urlStr转变为URL类对象
//用来解决对于https接口地址的访问
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
System.out.println("Warning: URL Host: " + urlHostName + " vs. "
+ session.getPeerHost());
return true;
}
};
//访问https接口时,服务器不信任我们自己创建的证书,所以在代码中必须要忽略证书信任问题。只要在创建connection之前调用两个方法:
trustAllHttpsCertificates();
HttpsURLConnection.setDefaultHostnameVerifier(hv); urlConn = (HttpURLConnection) url.openConnection(); //打开URL连接
urlConn.setDefaultUseCaches(false); //post请求不能使用缓存
urlConn.setConnectTimeout(30000);
urlConn.setReadTimeout(60000);
urlConn.setDoInput(true);
urlConn.setDoOutput(true);
urlConn.setRequestMethod("POST");
urlConn.setUseCaches(false); //post请求不能使用缓存
urlConn.setRequestProperty("Accept-Charset","UTF-8"); //设置编码方式
//没有设置内容类型,默认是Content-Type: application/x-www-form-urlencoded
out = urlConn.getOutputStream();
out.write(buff.toString().getBytes("UTF-8")); //请求体 in = new BufferedReader(new InputStreamReader(urlConn.getInputStream(),"UTF-8"));
String data = "";
StringBuffer sb = new StringBuffer("");
while (null != (data = in.readLine())) {
sb.append(data);
} return sb.toString();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(out != null) {
out.close();
}
if(in != null) {
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
if(urlConn != null) {
urlConn.disconnect();
}
} return "";
}
/**
* 发起HTTP POST请求。
* @param urlStr 请求URL
* @param output POST数据,这里是json格式字符串
* @return 响应结果
*/
public static String post(String urlStr, String output) {
URL url = null; HttpURLConnection urlConn = null;
OutputStream out = null;
BufferedReader in = null;
try {
url = new URL(urlStr); urlConn = (HttpURLConnection) url.openConnection();
urlConn.setDefaultUseCaches(false);
urlConn.setConnectTimeout(30000);
urlConn.setReadTimeout(60000);
urlConn.setDoInput(true);
urlConn.setDoOutput(true);
urlConn.setRequestMethod("POST");
urlConn.setUseCaches(false);
urlConn.setRequestProperty("Accept-Charset","UTF-8"); //HttpURLConnection.setRequestProperty(String key,String value); 设置http请求头,这里设置编码格式
urlConn.setRequestProperty("Content-Type", "application/json"); //设置内容类型:json格式
out = urlConn.getOutputStream();
out.write(output.getBytes("UTF-8")); in = new BufferedReader(new InputStreamReader(urlConn.getInputStream(),"UTF-8"));
String data = "";
StringBuffer sb = new StringBuffer("");
while (null != (data = in.readLine())) {
sb.append(data);
} return sb.toString();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(out != null) {
out.close();
}
if(in != null) {
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
if(urlConn != null) {
urlConn.disconnect();
}
} return "";
} //用来解决不能访问https请求的问题
private static void trustAllHttpsCertificates() throws Exception {
javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
javax.net.ssl.TrustManager tm = new miTM();
trustAllCerts[0] = tm;
javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext
.getInstance("SSL");
sc.init(null, trustAllCerts, null);
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc
.getSocketFactory());
}
//用来解决不能访问https请求的问题
private static class miTM implements javax.net.ssl.TrustManager,
javax.net.ssl.X509TrustManager {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
} public boolean isServerTrusted(
java.security.cert.X509Certificate[] certs) {
return true;
} public boolean isClientTrusted(
java.security.cert.X509Certificate[] certs) {
return true;
} public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType)
throws java.security.cert.CertificateException {
return;
} public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType)
throws java.security.cert.CertificateException {
return;
}
}
}
HTTP接口开发专题二(发送http请求的接口工具类)的更多相关文章
- 发送post请求的接口
一.简介 所有系统或者软件.网站都是从登录开始,所以首先介绍的第一个post请求是登录. 二.help函数 学习一个新的模块捷径,直接用help()函数查看相关注释和案例内容 for example: ...
- SpringBoot之WEB开发-专题二
SpringBoot之WEB开发-专题二 三.Web开发 3.1.静态资源访问 在我们开发Web应用的时候,需要引用大量的js.css.图片等静态资源. 默认配置 Spring Boot默认提供静态资 ...
- python接口自动化(八)--发送post请求的接口(详解)
简介 上篇介绍完发送get请求的接口,大家必然联想到发送post请求的接口也不会太难,被聪明的你又猜到了.答案是对的,虽然发送post请求的参考例子很简单,但是实际遇到的情况却是很复杂的,因为所有系统 ...
- Http请求通信(工具类)
Http请求通信(工具类) 异步消息处理流程是: 首先需要在主线程当中创建一个Handle对象,并重写handlerMessage()方法. 然后当子线程中需要进行UI操作时,就创建一个Message ...
- HTTP接口开发专题三(发送http请求,调用http接口的流程)
一.xml数据格式传输 1)构造xml参数:通过JAXB将java对象转换为xml 2)调用上一篇的http工具类的方法,发送请求到目的接口地址 3)返回的xml字符串结果,用JAXB进行解析成jav ...
- 微信接口开发1--向微信发送请求--获取access_token
//随便放置一个php文件在服务器上.执行该方法--调用模拟get提交---到微信-->获得微信返回的access_token 不建议自己编写模拟get提交方法. 建议直接导入微信框架LaneW ...
- python测试开发django-50.jquery发送ajax请求(get)
前言 有时候,我们希望点击页面上的某个按钮后,不刷新整个页面,给后台发送一个请求过去,请求到数据后填充到html上,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.Ajax可以完美的 ...
- HTTP接口开发专题一(四种常见的 POST 提交数据方式对应的content-type取值)
application/x-www-form-urlencoded 这应该是最常见的 POST 提交数据的方式了.浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 app ...
- java通过java.net.URL发送http请求调用接口
一般在*.html,*.jsp页面中我们通过使用ajax调用接口,这个是我们通常用的.对于这些接口,大都是本公司写的接口供自己调用,所以直接用ajax就可以.但是,如果是多家公司共同开发一个东西,一个 ...
随机推荐
- js之留言字数限制
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- ajax前置处理实现异步请求session过期时跳转登录页面
第一篇博文,mark一下zhq[0]. 问题描述:用户页面,当session过期或都session注销后,普通页面后端都会有过滤器,session过期Redirect到登录页面,但是ajax请求后端只 ...
- Windows批处理笔记
1. 路径类相关代号 %i提取第i个命令选项,例如%1提取第1个option,i可以取值从1到9 %~0: 取文件名(名+扩展名) %~f0:取全路径 %~d0:取驱动器名 %~p0:只取路径(不包驱 ...
- Java并发--如何创建线程
下面是本文的目录大纲: 一.Java中关于应用程序和进程相关的概念 二.Java中如何创建线程 三.Java中如何创建进程 转载原文链接:http://www.cnblogs.com/dolphin0 ...
- BZOJ2152 聪聪可可 【点分治】
BZOJ2152 聪聪可可 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问 ...
- cannot find lstdc++
centos下编译grpc-java时遇到的问题,google了一下 : sudo yum install libstdc++-static
- python 打印对象所有属性值
from pprint import pprint pprint (vars(your_object)) 另外查看所有属性名用.__dict__
- css animation动画
css 动画: 动画是CSS3中具有颠覆性的特征之一,可通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果. 必要元素: a.通过@keyframes指定动画序列:自动补间动画,确定两 ...
- 使用neon 开发nodejs addon
备注:开发使用的是mac 系统,需要安装rust nodejs .python2.7 Xcode 1. 安装neon npm install -g neon-cli 2. 创建简单项目 neon ...
- #define用法
1.简单的define定义 #define MAXTIME 1000 一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写 if(i<MAXTIME) { // } 编译器在处理 ...