HttpURLConnection 用法
来源:互联网 发布:达芬奇消失的两年 知乎 编辑:程序博客网 时间:2024/05/29 14:20
HttpURLConnection
最近在写android blog的客户端,由于需要与网页交互,所以用到了这个类,整理一下。
创建方式:
据我所知有两种
1.HttpURLConnection conn = new HttpURLConnection(URL url);
2.HttpURLConnection conn = (HttpURLConnection) myurl.openConnection();
例子:
以下是本人blog客户端的某一片段
HttpURLConnection conn = (HttpURLConnection) myurl.openConnection(); //设置链接方式,默认GET conn.setRequestMethod("POST"); conn.setConnectTimeout(10000); conn.setReadTimeout(10000); conn.setDoOutput(true); conn.setDoInput(true); StringBuffer params = new StringBuffer(); params.append("number").append("=").append(number).append("&") .append("passwd").append("=").append(pw).append("&") .append("select").append("=").append(select); byte[] bytes = params.toString().getBytes(); OutputStream out = conn.getOutputStream(); out.write(bytes); out.close(); //conn.connect(); 可以省略,因为在getOutputStream()之前会自动调用connect()方法 if (200 == conn.getResponseCode()){ return 2; } else if (302 == conn.getResponseCode()){ String location = conn.getHeaderField("Location"); if (location != null && location.length() > 0){ Map<String,List<String>> headerFields = conn.getHeaderFields(); List<String> cookiesHeader = headerFields.get("Set-Cookie"); if (cookiesHeader != null){ for(String cookies : cookiesHeader){ List<HttpCookie> list = HttpCookie.parse(cookies); for(HttpCookie cookie :list){ cookieName = cookie.getName(); cookieValue = cookie.getValue(); } System.out.println(cookieName+cookieValue); return 3; } } } }else if(404 == conn.getResponseCode()) { return -1; }
总结:
HttpURLConnection.connect() 函数,只是建立了一个与服务器的tcp链接,并没有实际发送http请求.
无论是post还是get,http请求实际上直到HttpConnection.getInputStream()/getResponseCode()这个函数中才正式的发出去,
如果定义POST请求则不能使用setUseCache()方法
在用POST方式发送URL请求时,URL请求参数的设定顺序是重中之重,对connection对象的一切配置(那一堆set函数) 都必须要在connect()函数执行之前完成。而对outputStream的写操作,又必须要在inputStream的读操作之前。这些顺序实际上是由http请求的格式决定的.如果inputStream读操作在outputStream的写操作之前,会抛出异常:
java.net.ProtocolException: Cannot write output after reading input.......
http正文的内容是通过outputStream流写入的,实际上outputStream不是一个网络流,充其量是一个字符流串,往里面写入的东西并不会立即发送到网络,而是存在于内存缓冲区中,待outputStream流关闭的时候,根据输入的内容立即生成http正文.在获取服务端配置的时候发送,所以在getInputStream之后再次对conn进行设置就会报错
getCookies from inputStream
同样截取自我的代码,这里首先从HttpURLConnection中获取了所有的请求头,然后选出Set-Cookie这个下面的所有List然后遍历他们就可以得到结果.
Map<String,List<String>> headerFields = conn.getHeaderFields();List<String> cookiesHeader = headerFields.get("Set-Cookie");if (cookiesHeader != null){ for(String cookies : cookiesHeader){ List<HttpCookie> list = HttpCookie.parse(cookies); for(HttpCookie cookie :list){ cookieName = cookie.getName(); cookieValue = cookie.getValue(); } System.out.println(cookieName+cookieValue); return 3 }}
这里还可以创建CookieManager实例,将cookies放入这里。
static final String COOKIES_HEADER = "Set-Cookie";HttpURLConnection connection = ... ;static java.net.CookieManager msCookieManager = new java.net.CookieManager();Map<String, List<String>> headerFields = connection.getHeaderFields();List<String> cookiesHeader = headerFields.get(COOKIES_HEADER);if(cookiesHeader != null){ for (String cookie : cookiesHeader) { msCookieManager.getCookieStore().add(null,HttpCookie .parse(cookie).get(0)); } }
取出的时候:
if(msCookieManager.getCookieStore().getCookies().size() > 0){ //While joining the Cookies, use ',' or ';' as needed. Most of the server are using ';' connection.setRequestProperty("Cookie", TextUtils.join(";", msCookieManager.getCookieStore().getCookies())); }
可见也是十分便利的
get Bitmap
很简单,直接上代码:
InputStream inputStream = conn.getInputStream();bitmap = BitmapFactory.decodeStream(inputStream);inputStream.close();
参考:
1.http://blog.csdn.net/x1617044578/article/details/8668632
2.http://stackoverflow.com/questions/16150089/how-to-handle-cookies-in-httpurlconnection-using-cookiemanager
- HttpURLConnection 用法
- HttpURLConnection 用法
- HttpURLConnection用法
- HttpURLConnection 用法
- HttpURLConnection用法
- HttpURLConnection用法
- HttpURLConnection--HttpURLConnection的基本用法
- HttpURLConnection简单用法
- HttpURLConnection类的用法
- HttpURLConnection简单用法
- HttpURLConnection用法详解
- HttpURLConnection用法详解
- HttpURLConnection用法详解
- HttpURLConnection用法详解
- HttpURLConnection用法详解
- HttpURLConnection用法详解
- HttpURLConnection用法详解
- HttpURLConnection用法详解
- TCP并发模型设计
- 浅谈iOS开发.a静态库的打包(包括打包的文件中用到了一些别人的三方库和分类的处理)
- JS完美运动框架详解——原理分析及demo
- 认识大数据
- Swift学习笔记 -- 枚举和结构
- HttpURLConnection 用法
- Spark 学习入门教程
- FET输入型放大器
- Android 查看pdf文档——PDFView
- 安卓同样优秀看iOS后Android的进步
- 帮 C/C++ 程序员彻底了解链接器
- SMPP模拟器SMPPSim安装纪要
- json2.js的作用与使用示例
- Dictonary字典