HttpClient快速API
来源:互联网 发布:多岛遗传算法介绍 编辑:程序博客网 时间:2024/06/10 13:04
5.1.Easy to use facade API
HttpClient从4.2开始支持快速api。快速api仅仅实现了HttpClient的基本功能,它只要用于一些不需要灵活性的简单场景。例如,快速api不需要用户处理连接管理和资源释放。
下面是几个使用快速api的例子:
// 执行一个get方法,设置超时时间,并且将结果变成字符串 Request.Get("http://www.yeetrack.com/") .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
- HttpClient快速API
- HttpClient 4.3详细教程之快速API
- Httpclient Core API Document
- HttpClient的快速使用
- memo:HttpClient快速入门
- httpclient快速入门
- HttpClient Fluent API 的使用
- 有道翻译API+Jackson+HttpClient
- HttpClient API常用方法解释
- Part1-HttpClient快速入门案例
- HttpClient学习研究---HttpClient快速应用---获取手机归属地
- httpclient的get方法的官方API
- 使用HTTPclient访问豆瓣API问题
- Apache HttpComponents(HTTPClient) Fluent API 使用
- httpclient 4.5.1---流式API使用
- Web Api 请求调用——httpclient
- 通过httpClient访问第三方API
- 通过HttpClient 调用ASP.NET Web API
- HttpClient连接管理
- SQL Server中like匹配下划线的方法
- HttpClient状态管理
- libevent源码分析--I/O事件
- HttpClientHTTP认证
- HttpClient快速API
- luci 的themes编译成ipk步骤
- 其他----
- java判断数字是否是3的倍数
- 最新版本 PHP (windows)开发环境配置
- DDNS(动态域名解析服务)——让动态的IP固定下来
- 最近招聘面试的一些感悟
- SQL 语法 (一)
- 微信之志存高远