HttpConnection的使用
项目中需要与第三方系统交互,而交互的方式是XML报文形式,所以会用到HttpConnection与第三方系统连接交互,使用起来并不复杂,但是有几点需要注意的:
1.乱码的问题解决
2.超时的设置,注意这个问题很严重,当你网络正常的时候看不出区别,但是当你网络不正常的时候,没有设置超时时间会导致你的系统一直尝试连接三方系统,可能会导致系统延迟很久所以一定记得处理,一个应用的效率很重要。
附上代码:
HttpURLConnection urlConnection = null;
OutputStream outputStream = null;
BufferedReader bufferedReader = null; try { URL httpUrl = new URL(url);//创建对应的url对象
urlConnection = (HttpURLConnection) httpUrl.openConnection();//HttpConnection对象,这一步只是创建了对象并没有连接远程服务器
urlConnection.setDoInput(true);//允许读
urlConnection.setDoOutput(true);//允许写
urlConnection.setRequestMethod("POST");//请求方式
urlConnection.setRequestProperty("Pragma:", "no-cache");
urlConnection.setRequestProperty("Cache-Control", "no-cache");
urlConnection.setRequestProperty("Content-Type", "text/xml");//请求的消息格式
urlConnection.setConnectTimeout(6000);//很重要,设置超时时间
urlConnection.connect();//真正的连接服务器
outputStream = urlConnection.getOutputStream();
byte[] bytes = xml.getBytes("GBK");//这里的xml即为你想传递的值,因为项目中与三方交互要用GBK编码所以转换为GBK
outputStream.write(bytes);//传递值
StringBuffer temp = new StringBuffer();
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
Reader rd = new InputStreamReader(in,"GBK");//服务器返回的也是GBK编码格式的数据。
int c = 0;
while ((c = rd.read()) != -1) {
temp.append((char) c);
}//其实可以使用String str =new String(response.getBytes(),"GBK");这种方式解决乱码问题,但是这次项目中使用这种方式并没有解决,所以干脆一个个字节的转。
in.close();
return temp.toString(); } catch (MalformedURLException e) {
log.error("connect server failed,cause{}", e.getMessage()); } catch (IOException e) {
log.error("io execute failed,cause{}", e.getMessage());
throw e; } finally {
try { if (!Arguments.isNull(outputStream)) {
outputStream.close();
}
if (!Arguments.isNull(bufferedReader)) {
bufferedReader.close();
} //该处理的资源需要处理掉,该关闭的需要关闭
} catch (IOException e) {
log.error("io close failed , cause{}", e.getMessage());
} }
交互很简单 但是细节很重要。。。。
HttpConnection的使用的更多相关文章
- HttpConnection方式访问网络
参考疯狂android讲义,重点在于学习1.HttpConnection访问网络2.多线程下载文件的处理 主activity: package com.example.multithreaddownl ...
- 解决ImportError: cannot import name HTTPConnection的方法
在写python程序的时候,使用from httplib import HTTPConnection,在run的时候提示ImportError: cannot import name HTTPConn ...
- python httpConnection详解
模块urllib,urllib2,httplib的区别 httplib实现了http和https的客户端协议,但是在python中,模块urllib和urllib2对httplib进行了更上层的封装. ...
- HttpConnection
1.HttpConnection 用于接受和发送网络数据 网络操作必须新开个子线程执行,否则会出现 ANR(Application Not Response) 应用无响应异常 Get: /** * 通 ...
- HTTPConnectionPool(host='xx.xx.xx.xx', port=xx): Max retries exceeded with url:(Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x0000015A25025EB8>...))
HTTPConnectionPool(host='xx.xx.xx.xx', port=xx): Max retries exceeded with url:(Caused by ConnectTim ...
- HttpConnection详解【转】
HttpConnection详解[转] HttpURLConnection对象 1.从Internet获取网页,发送请求,将网页以流的形式读回来. 步骤:1)创建一个URL对象:URL url ...
- httplib:AttributeError: 'module' object has no attribute 'HTTPConnection'
# -*-coding:gb2312-*- #Function:学习python的httplib模块 import httplib conn = httplib.HTTPConnection(&quo ...
- python urllib2 httplib HTTPConnection
httplib实现了HTTP和HTTPS的客户端协议,一般不直接使用,在python更高层的封装模块中(urllib,urllib2)使用了它的http实现. import httplib conn ...
- Android使用Http协议访问网络——HttpConnection
套路篇 使用HttpConnection访问网络一般有如下的套路: 1.获取到HttpConnection的实例,new出一个URL对象,并传入目标的网址,然后调用一下openConnection() ...
随机推荐
- 专项训练知识点与错题整理-nowcoder-c++
1- 来自:http://www.cskaoyan.com/thread-595813-1-1.html 1.拷贝构造函数 转自:https://www.cnblogs.com/alantu2018/ ...
- Oracle trigger 触发器
触发器使用教程和命名规范 目 录触发器使用教程和命名规范 11,触发器简介 12,触发器示例 23,触发器语法和功能 34,例一:行级触发器之一 45,例二:行级触发器之二 46,例三:INSTEA ...
- FAQs on Android
@1: Environment Setup Ubuntu 14.04 32bits 1. Call Requires API level 11 (current min is 8) Android. ...
- javascript笔记——js获取input标签中光标的索引
出处:http://www.cnblogs.com/MrZouJian/p/5850553.html function getTxt1CursorPosition(){ var oTxt1 = doc ...
- HTML5游戏开发系列教程7(译)
原文地址:http://www.script-tutorials.com/html5-game-development-lesson-7/ 今天我们将完成我们第一个完整的游戏--打砖块.这次教程中,将 ...
- 如何获知PHP程序占用多少内存(复制)
想要知道编写的 PHP 脚本需要占用多少内存么?很简单,直接使用 PHP 查看当前分配给 PHP 脚本的内存的函数 memory_get_usage() 就可以了 下面是使用示例: 复制代码 代码如下 ...
- (译)Windows Azure:移动后端开发的主要更新
Windows Azure:移动后端开发的主要更新 这周我们给Windows Azure释出了一些很棒的更新,让云上的移动应用开发明显的简单了.这 些新功能包括: 移动服务:定制API支持移动服务:G ...
- 让boost.variant支持lambda表达式访问
前言 之前写个过一篇博客叫<浅谈boost.variant的几种访问方式>,里面讲到了可以通过访问者方式来获取variant的值,但是在重载函数operator()里面只能够获取varia ...
- SQL统计信息解释
[SQL基础]统计信息解释 在平时优化SQL的时候,最长用的就是:SET STATISTICS ON,它可以用来查看我们写的查询语句到底性能如何,不过,究竟这个性能的指标是怎么样的呢?首先需要明白的, ...
- Web前端学习笔记之JavaScript、jQuery、AJAX、JSON的区别
官网的英文解释: javascript和jQuery有点关系,js是一种脚本语言,主要用于客户端,现在主要用于实现一些网页效果. jquery是js的一个库,你可以认为是对js的补充,提供了很多方便易 ...