总结几个最近处理问题中使用http协议的代码
正文前先来一波福利推荐:
福利一:
百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家。
福利二:
毕业答辩以及工作上各种答辩,平时积累了不少精品PPT,现在共享给大家,大大小小加起来有几千套,总有适合你的一款,很多是网上是下载不到。
获取方式:
微信关注 精品3分钟 ,id为 jingpin3mins,关注后回复 百万年薪架构师 ,精品收藏PPT 获取云盘链接,谢谢大家支持!

------------------------正文开始---------------------------
demo1:几个不同的http请求方式总结:
-------------------------------------------------------------------------------------------------
Post新版本的请求方式:
基于的版本:
<!--<!– https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient –>-->
<!--<dependency>-->
<!--<groupId>org.apache.httpcomponents</groupId>-->
<!--<artifactId>httpclient</artifactId>-->
<!--<version>4.5.</version>-->
<!--</dependency>-->
// String uploadResponse = Request.Post(nodeAddress + "/" + bucketName + "/" + objectName)
// .addHeader("x-nos-token", uploadToken)
// .bodyByteArray(chunkData, 0, readLen)
// .execute()
// .returnContent()
// .toString();
-------------------------------------------------------------------------------------------------
Post请求版本方式二:
// public static String doPost(String url, String token, byte[] chunk, int off, int len)
// {
// CloseableHttpClient httpClient = null;
// CloseableHttpResponse httpResponse = null;
// String result = "";
// // 创建httpClient实例
// httpClient = HttpClients.createDefault();
// // 创建httpPost远程连接实例
// HttpPost httpPost = new HttpPost(url);
// // 配置请求参数实例
// RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 设置连接主机服务超时时间
// .setConnectionRequestTimeout(35000)// 设置连接请求超时时间
// .setSocketTimeout(60000)// 设置读取数据连接超时时间
// .build();
// // 为httpPost实例设置配置
// httpPost.setConfig(requestConfig);
// // 设置请求头
// httpPost.addHeader("x-nos-token", token);
// // 封装post请求参数
// // 为httpPost设置封装好的请求参数
// HttpEntity requestEntity = new ByteArrayEntity(chunk, 0, len);
// httpPost.setEntity(requestEntity);
//
// try {
// // httpClient对象执行post请求,并返回响应参数对象
// httpResponse = httpClient.execute(httpPost);
// // 从响应对象中获取响应内容
// HttpEntity entity = httpResponse.getEntity();
// result = EntityUtils.toString(entity);
// } catch (ClientProtocolException e) {
// e.printStackTrace();
// } catch (IOException e) {
// e.printStackTrace();
// } finally {
// // 关闭资源
// if (null != httpResponse) {
// try {
// httpResponse.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// if (null != httpClient) {
// try {
// httpClient.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// }
// return result;
// }
-------------------------------------------------------------------------------------------------
Post请求版本方式二:
public static String sendPost(String url, String token, byte[] chunk, int off, int len)
{
// 创建httpClient实例对象
HttpClient httpClient = new HttpClient();
// 设置httpClient连接主机服务器超时时间:15000毫秒
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout();
// 创建post请求方法实例对象
PostMethod postMethod = new PostMethod(url);
// 设置post请求超时时间
postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, );
postMethod.addRequestHeader("x-nos-token", token);
try {
//json格式的参数解析 RequestEntity entity = new ByteArrayRequestEntity(chunk);
postMethod.setRequestEntity(entity); httpClient.executeMethod(postMethod);
String result = postMethod.getResponseBodyAsString();
postMethod.releaseConnection();
return result;
} catch (IOException e) {
logger.info("POST请求发出失败!!!");
e.printStackTrace();
}
return null;
}
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
GET请求方式一:
public static String doGet(String httpurl)
{
HttpURLConnection connection = null;
InputStream is = null;
BufferedReader br = null;
// 返回结果字符串
String result = null; try {
// 创建远程url连接对象
URL url = new URL(httpurl);
// 通过远程url连接对象打开一个连接,强转成httpURLConnection类
connection = (HttpURLConnection) url.openConnection();
// 设置连接方式:get
connection.setRequestMethod("GET");
// 设置连接主机服务器的超时时间:15000毫秒
connection.setConnectTimeout();
// 设置读取远程返回的数据时间:60000毫秒
connection.setReadTimeout();
// 发送请求
connection.connect();
// 通过connection连接,获取输入流
if (connection.getResponseCode() == ) {
is = connection.getInputStream();
// 封装输入流is,并指定字符集
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
// 存放数据
StringBuffer sbf = new StringBuffer();
String temp = null;
while ((temp = br.readLine()) != null) {
sbf.append(temp);
sbf.append("\r\n");
}
result = sbf.toString();
}
} catch (MalformedURLException e) {
logger.error("非法地址格式异常...");
e.printStackTrace();
} catch (IOException e) {
logger.error("Get请求中IO流出现异常");
e.printStackTrace();
} finally {
// 关闭资源
if (null != br) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
} if (null != is) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
} connection.disconnect();// 关闭远程连接
} return result;
}
-------------------------------------------------------------------------------------------------
过程问题记录:
在使用get请求的时候,如果URL中的请求参数包含了特殊字符,需要对特殊字符进行转义:
有些字符在URL中具有特殊含义,基本编码规则如下:
特殊含义 十六进制值
.+ 表示空格(在 URL 中不能使用空格) %
./ 分隔目录和子目录 %2F
.? 分隔实际的 URL 和参数 %3F
.% 指定特殊字符 %
.# 表示书签 %
.& URL 中指定的参数间的分隔符 %
解决方法:
//对鉴权参数做AES加密处理
requestId = java.net.URLEncoder.encode( AESCryptUtils.encode(requestId) );
data = java.net.URLEncoder.encode( AESCryptUtils.encode(data) );
action = java.net.URLEncoder.encode( AESCryptUtils.encode(action) );
String URL = AUTH_URL + "?" + "data=" + data + "&requestId=" + requestId + "&action=" + action;
总结几个最近处理问题中使用http协议的代码的更多相关文章
- 1.JAVA中使用JNI调用C++代码学习笔记
Java 之JNI编程1.什么是JNI? JNI:(Java Natibe Inetrface)缩写. 2.为什么要学习JNI? Java 是跨平台的语言,但是在有些时候仍然是有需要调用本地代码 ( ...
- 当C#中带有return的TryCatch代码遇到Finally时代码执行顺序
编写的代码最怕出现的情况是运行中有错误出现,但是无法定位错误代码位置.综合<C#4.0图解教程>,总结如下: TryCatchFinally用到的最多的是TryCatch,Catch可以把 ...
- 微信公众平台中添加qq在线聊天代码
微信公众平台是个不错的媒体,可以和你的小伙伴们即时交流,但你的小伙伴们是用手机上的微信,打字自然就慢了:有人说用微信网页版,那个也不习惯,再说也不一定所有人都知道网页版微信.(2014.01.22更新 ...
- 在PHP与HTML混合输入的页面或者模板中就需要对PHP代码进行闭合
PHP程序的时候会在文件的最后加上一个闭合标签,如下: <?phpclass MyClass{public function test(){//do something, etc.}}?> ...
- 判断字符串中是否有SQL攻击代码
判断一个输入框中是否有SQL攻击代码 public const string SQLSTR2 = @"exec|cast|convert|set|insert|select|delete|u ...
- Android 中多点触摸协议
http://blog.csdn.net/zuosifengli/article/details/7398661 Android 中多点触摸协议: 参考: http://www.kernel.org/ ...
- C# WCF学习笔记(二)终结点地址与WCF寻址(Endpoint Address and WCF Addressing) WCF中的传输协议
URI的全称是 Uniform Rosource Identifire(统一资源标识),它唯一标识一个确定的网绐资源,同时也表示资源所处的位置及访问的方式(资源访问所用的网络协议). 对于Endpoi ...
- 网页中插入Flvplayer视频播放器代码
http://blog.csdn.net/china_skag/article/details/7424019 原地址:http://yuweiqiang.blog.163.com/blog/stat ...
- PHP中检测ajax请求的代码例子
多数情况下,基于JavaScript 的Js框架如jquery.Mootools.Prototype等,在发出Ajax请求指令时,都会发送额外的 HTTP_X_REQUESTED_WITH 头部信息, ...
随机推荐
- iwap问题
1. 2. . . ========================================================================================== ...
- QT5 文件读写操作
QFile Class 1.read读文件 加载文件对象 QFile file("文件地址"); 打开加载的文件file.open(打开方式); 操作文件 关闭打开的文件file ...
- zabbix的日志监控
前提条件是该日志文件对于启动zabbix agent进程的用户开启了可读权限,而且该日志的路径对该用户开方x权限,让能取到这个日志文件 第一个参数可以不用引号,前提是zabbix用户可以进入文件路径, ...
- xlrd/xlwt
操作 xls格式的excel文件 读模块 xlrd import xlrd 打开文件 wb= xlrd.open_workbook('xxxx.xls') 获取excel中的表 ws= wb.shee ...
- 特征工程学习01-sklearn单机特征工程
特征工程学习01-sklearn单机特征工程 小书匠 kindle 0.数据的导入 from sklearn.datasets import load_iris #导入IRIS数据集 iris= ...
- CF891C Envy【最小生成树】
题目链接 我们知道,根据Kruskal的贪心,对于最小生成树,每一种权值的边数是一样的,而且如果将\(\leq x\)的边做最小生成树,合法方案的联通性是一样的.所以我们可以对于所有边分开考虑. 对于 ...
- codeforces626F
CF626F Group Projects 有n个学生,每个学生有一个能力值ai.现在要把这些学生分成一些(任意数量的)组,每一组的“不和谐度”是该组能力值最大的学生与能力值最小的学生的能力值的差. ...
- HDU 6041 I Curse Myself ——(仙人掌图,tarjan,转化)
题解见这个博客:http://blog.csdn.net/ME495/article/details/76165039. 复杂度不太会算..这个经典问题的解法需要注意,维护队列里面只有k个元素即可.另 ...
- TCP HTTP SOCKET之间的有什么关系
网络由下往上分为 物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层, 三者从本质上来说没有可 ...
- CodeForces - 1175B Catch Overflow!(栈模拟多重for循环)
You are given a function ff written in some basic language. The function accepts an integer value, w ...