工具类总结---(六)---之http及https请求
下面使用的是HttpURLConnection进行的网络链接,并对https进行了忽略证书。
在这个utils里面,也使用到前面几个utils,比如下载文件的方法,就使用到了Fileutils
package cgjr.com.cgjr.utils; import android.text.TextUtils; import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Map; import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager; import cgjr.com.cgjr.constants.Constants; /**
* Created by Administrator on 2016/4/13.
*/
public class HttpUtils { /**
* 通过http post 提交数据
*
* @param url 访问路径
* @param content 内容
* @param encoding 返回内容字符编码
* @return
*/
public static String HttpPost(String url, String content, String encoding) {
DebugUtils.i("HttpUtils", "content: " + content);
HttpURLConnection conn = null;
String str = "";
try {
conn = (HttpURLConnection) new URL(url).openConnection();
conn.setDoInput(true);// 打开输入流,以便从服务器获取数据
conn.setDoOutput(true);// 打开输出流,以便向服务器提交数据
conn.setConnectTimeout(0); // 设置连接超时时间
conn.setReadTimeout(30000); //设置返回超时时间,下面要对超时进行处理
conn.setRequestMethod("POST");
conn.setUseCaches(false);// 使用Post方式不能使用缓存
conn.setInstanceFollowRedirects(true);
//conn.setRequestProperty("Cookie", SessionId);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
conn.connect();
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
out.writeBytes(content);
out.flush();
out.close(); // flush and close
int response = conn.getResponseCode(); // 获得服务器的响应码
if (response == HttpURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), encoding));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
line = new String(line.getBytes(), "UTF-8");
sb.append(line);
}
str = sb.toString();
}
} catch (Exception e) {
e.printStackTrace();
//里面会抛连接和返回超时java.net.SocketTimeoutException,还有IO异常
return "faild";
} finally {
conn.disconnect();
conn = null;
}
return str;
} /**
* GET请求方式
*
* @param url
* @return
*/
public static String HttpGet(String url, String encoding) {
LogUtils.i("HttpUtils", "encoding: " + encoding);
HttpURLConnection conn = null;
String str = "";
try {
conn = (HttpURLConnection) new URL(url).openConnection();
conn.setDoInput(true);// 打开输入流,以便从服务器获取数据
conn.setDoOutput(true);// 打开输出流,以便向服务器提交数据
conn.setConnectTimeout(30000); // 设置连接超时时间
conn.setReadTimeout(30000); //设置返回超时时间,下面要对超时进行处理
conn.setRequestMethod("GET");
conn.connect();
int response = conn.getResponseCode(); // 获得服务器的响应码
if (response == HttpURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), encoding));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
line = new String(line.getBytes(), "UTF-8");
sb.append(line);
}
str = sb.toString();
}
} catch (Exception e) {
e.printStackTrace();
//里面会抛连接和返回超时java.net.SocketTimeoutException,还有IO异常
return "faild";
} finally {
if (conn != null)
conn.disconnect();
}
return str;
} /**
* 通过https post 提交数据
*
* @param url 访问路径
* @param content 内容
* @param encoding 返回内容字符编码
* @return
*/
public static String HttpsPost(String url, String content, String encoding) {
LogUtils.i("HttpUtils", "content: " + content);
SSLContext sc = null;
try {
sc = SSLContext.getInstance("TLS");
MyTrustManager mtm = new MyTrustManager();
sc.init(null, new TrustManager[]{mtm}, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
}); } catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return "faild";
} catch (KeyManagementException e) {
e.printStackTrace();
return "faild";
}
HttpsURLConnection conn = null;
String str = "";
try {
conn = (HttpsURLConnection) new URL(url).openConnection();
conn.setDoInput(true);// 打开输入流,以便从服务器获取数据
conn.setDoOutput(true);// 打开输出流,以便向服务器提交数据
conn.setConnectTimeout(30000); // 设置连接超时时间
conn.setReadTimeout(30000); //设置返回超时时间,下面要对超时进行处理
conn.setRequestMethod("POST");
conn.setUseCaches(false);// 使用Post方式不能使用缓存
conn.setInstanceFollowRedirects(true);
//conn.setRequestProperty("Cookie", SessionId);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
conn.connect();
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
out.writeBytes(content);
out.flush();
out.close(); // flush and close
int response = conn.getResponseCode(); // 获得服务器的响应码
if (response == HttpURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), encoding));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
line = new String(line.getBytes(), "UTF-8");
sb.append(line);
}
str = sb.toString();
}
} catch (Exception e) {
e.printStackTrace();
//里面会抛连接和返回超时java.net.SocketTimeoutException,还有IO异常
return "faild";
} finally {
if (conn != null) {
conn.disconnect();
}
}
return str;
} public static String HttpsGet(String url, String encoding) {
LogUtils.i("HttpUtils", "httpsget url: " + url + " encoding: " + encoding);
SSLContext sc = null;
try {
sc = SSLContext.getInstance("TLS");
MyTrustManager mtm = new MyTrustManager();
sc.init(null, new TrustManager[]{mtm}, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
}); } catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return "faild";
} catch (KeyManagementException e) {
e.printStackTrace();
return "faild";
}
HttpsURLConnection conn = null;
String str = "";
try {
conn = (HttpsURLConnection) new URL(url).openConnection();
conn.setDoInput(true);// 打开输入流,以便从服务器获取数据
conn.setDoOutput(true);// 打开输出流,以便向服务器提交数据
conn.setConnectTimeout(30000); // 设置连接超时时间
conn.setReadTimeout(30000); //设置返回超时时间,下面要对超时进行处理
conn.setRequestMethod("GET");
conn.connect();
int response = conn.getResponseCode(); // 获得服务器的响应码
if (response == HttpURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), encoding));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
line = new String(line.getBytes(), "UTF-8");
sb.append(line);
}
str = sb.toString();
}
} catch (Exception e) {
e.printStackTrace();
//里面会抛连接和返回超时java.net.SocketTimeoutException,还有IO异常
return "faild";
} finally {
if (conn != null) {
conn.disconnect();
}
}
return str;
} /**
* 获取基本信息
*
* @return
*/
public static StringBuffer getConstansData() {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(Constants.order_from);//向服务器传递版本号 stringBuffer.deleteCharAt(stringBuffer.length() - 1);
return stringBuffer;
} /**
* 封装请求体信息
* @params 请求体内容,
* @encode 编码格式
*/
public static StringBuffer getRequestData(Map<String, String> params, String encode) {
StringBuffer stringBuffer = getConstansData(); // 存储封装好的请求体信息
stringBuffer.append("&");
try {
if (params != null && params.size() > 0) {
for (Map.Entry<String, String> entry : params.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
if (!TextUtils.isEmpty(key)) {
stringBuffer.append(key)
.append("=")
.append(URLEncoder.encode((TextUtils.isEmpty(value) ? "" : value), encode))
.append("&");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
stringBuffer.deleteCharAt(stringBuffer.length() - 1); // 删除最后的一个"&"
LogUtils.i("", stringBuffer.toString());
return stringBuffer;
} static class MyTrustManager implements X509TrustManager { @Override
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException { } @Override
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException { } @Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
} /**
* 服务器下载文件
*
* @param fileDir 文件保存路径
* @param fileName 文件名称
* @param url_ 下载路径
* @return
*/
public static boolean downLoadingFile(String fileDir, String fileName, String url_) {
boolean flag = false;
HttpURLConnection conn = null;
FileUtils fileUtils = new FileUtils();
try {
conn = (HttpURLConnection) (new URL(url_)).openConnection();
conn.setRequestMethod("GET");
conn.setReadTimeout(10 * 1000);
conn.getDoInput();
conn.getDoOutput();
conn.connect();
if (conn.getResponseCode() == 200) {
File file = fileUtils.write2SDFromInput(fileDir, fileName, conn.getInputStream());
if (file != null) {
flag = true;
} else {
flag = false;
}
}
} catch (IOException e) {
e.printStackTrace();
flag = false;
} finally {
if (conn != null) {
conn.disconnect();
}
}
return flag;
} }
工具类总结---(六)---之http及https请求的更多相关文章
- Android基于Retrofit2.0 +RxJava 封装的超好用的RetrofitClient工具类(六)
csdn :码小白 原文地址: http://blog.csdn.net/sk719887916/article/details/51958010 RetrofitClient 基于Retrofit2 ...
- 『言善信』Fiddler工具 — 15、使用Fiddler抓取HTTPS请求
目录 1.Fiddler抓取HTTPS过程 2.拓展:SSL/TLS证书握手原理 3.Fiddler抓取HTTPS原理总结 4.Fiddler抓取HTTPS设置 步骤1:配置证书 步骤2:勾选设置 5 ...
- javascript常用工具类整理(copy)
JavaScript常用工具类 类型 日期 数组 字符串 数字 网络请求 节点 存储 其他 1.类型 isString (o) { //是否字符串 return Object.prototype.to ...
- JavaScript工具类(三):localStorage本地储存
localStorage Web 存储 API 提供了 sessionStorage (会话存储) 和 localStorage(本地存储)两个存储对象来对网页的数据进行添加.删除.修改.查询操作. ...
- iOS开发 -- 为本地文件添加自定义属性的工具类
前言:实际开发,我们可能会有这样的需求,就是为文件添加自定义的属性,或者是可以将文件的相关信息添加进该文件的属性中,这样可以以备下次读取利用. 那么本文就是要介绍"拓展文件属性的工具类&qu ...
- Java字符串转16 进制工具类Hex.java
Java字符串转16 进制工具类Hex.java 学习了:https://blog.csdn.net/jia635/article/details/56678086 package com.strin ...
- Spring 注解(二)注解工具类 AnnotationUtils 和 AnnotatedElementUtils
Spring 注解(二)注解工具类 AnnotationUtils 和 AnnotatedElementUtils Spring 系列目录(https://www.cnblogs.com/binary ...
- 【Hutool】Hutool工具类之Http工具——HttpUtil
最简单最直接的上手可以参见参考文档:http://hutool.mydoc.io/?t=216015 Http协议的介绍,请参考web随笔:http://www.cnblogs.com/jiang ...
- java:工具类
Google guava工具类的介绍和使用:https://blog.csdn.net/wwwdc1012/article/details/82228458 Apache Commons 工具类介绍及 ...
- java 微信开发的工具类WeChatUtils
import com.alibaba.fastjson.JSONObject;import com.bhudy.entity.BhudyPlugin;import com.bhudy.service. ...
随机推荐
- python如何保证输入键入数字
要求:python写一个要求用户输入数字,如果不是数字就一直循环要求输入,直到输入数字为止的代码 错误打开方式: while True: ten=input('Enter a number:') if ...
- (转)经验分享:CSS浮动(float,clear)通俗讲解
很早以前就接触过CSS,但对于浮动始终非常迷惑,可能是自身理解能力差,也可能是没能遇到一篇通俗的教程. 前些天小菜终于搞懂了浮动的基本原理,迫不及待的分享给大家. 写在前面的话: 由于CSS内容比较多 ...
- css远距离链接
远距离链接主要运用了hover伪类,但是运用了两次 <!DOCTYPE html> <html lang="en"> <head> <me ...
- PRINCE2重要性--光环国际培训
项目的重要性 答:对于当今的组织来说,一个关键的挑战,就是能够成功地平衡以下两个并存的.互相竞争的方面:保持现有的商业运营--盈利能力.服务质量.客户关系.品牌忠实度.生产效率.市场信心等,这些被称为 ...
- API的文档自动生成——基于CDIF的SOA基本能力
当前,作为大部分移动app和云服务后台之间的标准连接方式,REST API已经得到了绝大部分开发者的认可和广泛的应用.近年来,在新兴API经济模式逐渐兴起,许多厂商纷纷将自己的后台业务能力作为REST ...
- Terminating app due to uncaught exception 'NSUnknownKeyException' this class is not key value coding-compliant for the key
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ViewController > se ...
- POJ2352Stars【树状数组】
Stars Description Astronomers often examine star maps where stars are represented by points on a pla ...
- Luogu2723丑数Humble Numbers【归并排序】
Luogu2723丑数Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包 ...
- C#调用webbrowser,阻止弹出新HTML页面
参考资料: 1.C#调用webbrowser,阻止弹出新IE窗口 http://www.cnblogs.com/blindman/p/3819649.html 2.[WPF]监听WPF的WebBrow ...
- POPTEST老李谈Debug和Release的区别(c#) 1
POPTEST老李谈Debug和Release的区别(c#) poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...