HttpClient4.3 教程 第五章 快速API
来源:互联网 发布:人为什么追求卓越 知乎 编辑:程序博客网 时间:2024/05/22 15:18
5.1.Easy to use facade API
HttpClient从4.2开始支持快速api。快速api仅仅实现了HttpClient的基本功能,它只要用于一些不需要灵活性的简单场景。例如,快速api不需要用户处理连接管理和资源释放。
下面是几个使用快速api的例子:
// 执行一个get方法,设置超时时间,并且将结果变成字符串 Request.Get("http://www.itnose.net/") .connectTimeout(1000) .socketTimeout(1000) .execute().returnContent().asString(); // 使用HTTP/1.1,通过'expect-continue' handshake来执行post方法 // 内容包含一个字符串,并且将结果转化成byte数组 Request.Post("http://www.yeetrack.com/do-stuff") .useExpectContinue() .version(HttpVersion.HTTP_1_1) .bodyString("Important stuff", ContentType.DEFAULT_TEXT) .execute().returnContent().asBytes(); // 通过代理服务器来执行一个带有特殊header的post请求,post请求中带有form表单,并且将返回结果写入文件 Request.Post("http://www.yeetrack.com/some-form") .addHeader("X-Custom-header", "stuff") .viaProxy(new HttpHost("myproxy", 8080)) .bodyForm(Form.form().add("username", "vip").add("password", "secret").build()) .execute().saveContent(new File("result.dump"));
如果需要在指定的安全上下文中执行某些请求,我们也可以直接使用Exector,这时候用户的认证信息就会被缓存起来,以便后续的请求使用。
Executor executor = Executor.newInstance() .auth(new HttpHost("somehost"), "username", "password") .auth(new HttpHost("myproxy", 8080), "username", "password") .authPreemptive(new HttpHost("myproxy", 8080)); executor.execute(Request.Get("http://somehost/")) .returnContent().asString(); executor.execute(Request.Post("http://somehost/do-stuff") .useExpectContinue() .bodyString("Important stuff", ContentType.DEFAULT_TEXT)) .returnContent().asString();
5.1.1.响应处理
一般情况下,HttpClient的快速api不用用户处理连接管理和资源释放。但是,这样的话,就必须在内存中缓存这些响应消息。为了避免这一情况,建议使用使用ResponseHandler来处理Http响应。
Document result = Request.Get("http://somehost/content") .execute().handleResponse(new ResponseHandler<Document>() { public Document handleResponse(final HttpResponse response) throws IOException { StatusLine statusLine = response.getStatusLine(); HttpEntity entity = response.getEntity(); if (statusLine.getStatusCode() >= 300) { throw new HttpResponseException( statusLine.getStatusCode(), statusLine.getReasonPhrase()); } if (entity == null) { throw new ClientProtocolException("Response contains no content"); } DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance(); try { DocumentBuilder docBuilder = dbfac.newDocumentBuilder(); ContentType contentType = ContentType.getOrDefault(entity); if (!contentType.equals(ContentType.APPLICATION_XML)) { throw new ClientProtocolException("Unexpected content type:" + contentType); } String charset = contentType.getCharset(); if (charset == null) { charset = HTTP.DEFAULT_CONTENT_CHARSET; } return docBuilder.parse(entity.getContent(), charset); } catch (ParserConfigurationException ex) { throw new IllegalStateException(ex); } catch (SAXException ex) { throw new ClientProtocolException("Malformed XML document", ex); } } });
0 0
- HttpClient4.3 教程 第五章 快速API
- HttpClient4.3 教程 第五章 快速API
- 【HttpClient4.5中文教程】【第五章 :流式(链式)API】
- HttpClient4.3教程 第二章 连接管理
- HttpClient4.3教程 第四章 HTTP认证
- HttpClient4.3教程 第二章 连接管理
- HttpClient4.3教程 第二章 连接管理
- HttpClient4.3教程 第四章 HTTP认证
- HttpClient4.3教程 第二章 连接管理
- HttpClient4.3教程 第二章 连接管理
- HttpClient4.3教程
- HttpClient4.3教程
- HttpClient4.3教程
- HttpClient4.3教程(转载)
- HttpClient4.3教程 第三章 Http状态管理
- HttpClient4.3教程 第三章 Http状态管理
- HttpClient4.3教程 第三章 Http状态管理
- HttpClient4.5教程-第二章-连接管理
- SFGUI和OpenGL的深度测试
- android4.2
- 邻接表存图(出边表+入边表)
- W8 无法打开软件帮助的补丁
- Objective-C Key-Value Observing 模式
- HttpClient4.3 教程 第五章 快速API
- 项目中遇到的问题————Flash擦写
- Windows 下编程的一些常见问题(不定期更新)
- java swing 屏保 下雪 空格键退出
- 织梦DEDEcms去掉网站顶部的空白间距方法
- 【BZOJ】【P2038】【小Z的袜子】【题解】【莫队算法】
- 2013年中国数据库大会PPT
- mangos源码分析
- 关于c语言float型浮点数与double的区别