工具类总结---(六)---之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. ...
随机推荐
- Yahoo前端优化十四条军规
相信互联网已经越来越成为人们生活中不可或缺的一部分.Ajax,flex等等富客户端的应用使得人们越加“幸福”地体验着许多原先只能在C/S实 现的功能. 比如Google机会已经把最基本的office应 ...
- Jmeter-线程组
1.Sampler 取样器(Sampler)是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元,JMeter 原生支持多种不同的sampler , 如 HTTP Request Sam ...
- ubuntu-terminal快捷键
常用快捷键功能:Tab 自动补全 Ctrl+a 光标移动到开始位置 Ctrl+e 光标移动到最末尾 Ctrl+k 删除此处至末尾的所有内容 Ctrl+u 删除此处至开始的所有内容 Ctrl+d 删除当 ...
- Lvs+keepalived+mysql主从热备
p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; f ...
- 树莓派Raspberry中成功安装RobotFramework+Selenium
[原创链接]:http://www.cnblogs.com/atsats/p/6666848.html 一般RobotFramework都是安装在Windows/Linux的PC机上,这里将简单介绍在 ...
- ArcGIS API for JavaScript 4.2学习笔记[20] 使用参数查询要素(油井和地震关系)
这个例子相当复杂.我先简单说说这个例子是干啥的. 在UI上,提供了一个下拉框.两个滑动杆,以确定三个参数,使用这三个参数进行空间查询.这个例子就颇带空间查询的意思了. 这个例子是干嘛的呢?第一个参数是 ...
- MYSQL数据库导入大数据量sql文件失败的解决方案
1.在讨论这个问题之前首先介绍一下什么是"大数据量sql文件". 导出sql文件.选择数据库-----右击选择"转储SQL文件"-----选择"结构和 ...
- 六行python代码的爱心曲线
前些日子在做绩效体系的时候,遇到了一件囧事,居然忘记怎样在Excel上拟合正态分布了,尽管在第二天重新拾起了Excel中那几个常见的函数和图像的做法,还是十分的惭愧.实际上,当时有效偏颇了,忽略了问题 ...
- C# 超高速高性能写日志 代码开源
1.需求 需求很简单,就是在C#开发中高速写日志.比如在高并发,高流量的地方需要写日志.我们知道程序在操作磁盘时是比较耗时的,所以我们把日志写到磁盘上会有一定的时间耗在上面,这些并不是我们想看到的. ...
- ARM中断处理过程
以s3c2440 ARM9核为例: 一:s3c2440 ARM处理器特性: 1.S3C2440支持个中断源,含子中断源: 2.ARM9采用五级流水线方式: 3.支持外部中断和内部中断: 二.s3c2 ...