1、使用fluent API执行GET和POST请求
1) 执行GET请求
//使用超时设置执行GET,并将响应内容作为String返回。 Request.Get("http://somehost/") .connectTimeout(1000) .socketTimeout(1000) .execute().returnContent().asString();
2) 执行POST请求
//使用HTTP / 1.1通过“期望-继续”握手执行POST, //包含一个请求主体作为String,并返回响应内容作为字节数组。 Request.Post("http://somehost/do-stuff") .useExpectContinue() .version(HttpVersion.HTTP_1_1) .bodyString("Important stuff", ContentType.DEFAULT_TEXT) .execute().returnContent().asBytes(); //通过包含请求主体的代理使用自定义标头执行POST //作为HTML表单,并将结果保存到文件中 Request.Post("http://somehost/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"));
3) 使用Executor执行请求
Executor为了在特定的安全上下文中执行请求,还可以直接使用,从而将身份验证详细信息缓存并重新用于后续请求。
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();
2、响应(Response)处理
流利的Facade 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); } } });
相关文档:http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fluent.html