More fluent API tweaks; added web site content
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1195162 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
41cfb9bbea
commit
cc7f8c248f
|
@ -64,7 +64,7 @@ public class FluentExecutor {
|
||||||
// as an HTML form and save the result to the file
|
// as an HTML form and save the result to the file
|
||||||
executor.execute(Request.Post("http://somehost/some-form")
|
executor.execute(Request.Post("http://somehost/some-form")
|
||||||
.addHeader("X-Custom-header", "stuff")
|
.addHeader("X-Custom-header", "stuff")
|
||||||
.proxy(new HttpHost("myproxy", 8080))
|
.viaProxy(new HttpHost("myproxy", 8080))
|
||||||
.bodyForm(Form.form().add("username", "vip").add("password", "secret").build())
|
.bodyForm(Form.form().add("username", "vip").add("password", "secret").build())
|
||||||
).saveContent(new File("result.dump"));
|
).saveContent(new File("result.dump"));
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,7 @@ public class FluentRequests {
|
||||||
// as an HTML form and save the result to the file
|
// as an HTML form and save the result to the file
|
||||||
Request.Post("http://somehost/some-form")
|
Request.Post("http://somehost/some-form")
|
||||||
.addHeader("X-Custom-header", "stuff")
|
.addHeader("X-Custom-header", "stuff")
|
||||||
.proxy(new HttpHost("myproxy", 8080))
|
.viaProxy(new HttpHost("myproxy", 8080))
|
||||||
.bodyForm(Form.form().add("username", "vip").add("password", "secret").build())
|
.bodyForm(Form.form().add("username", "vip").add("password", "secret").build())
|
||||||
.execute().saveContent(new File("result.dump"));
|
.execute().saveContent(new File("result.dump"));
|
||||||
}
|
}
|
||||||
|
|
|
@ -250,14 +250,10 @@ public class Request {
|
||||||
|
|
||||||
//// HTTP connection route operations
|
//// HTTP connection route operations
|
||||||
|
|
||||||
public Request proxy(final HttpHost proxy) {
|
public Request viaProxy(final HttpHost proxy) {
|
||||||
return config(ConnRoutePNames.DEFAULT_PROXY, proxy);
|
return config(ConnRoutePNames.DEFAULT_PROXY, proxy);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Request noProxy() {
|
|
||||||
return removeConfig(ConnRoutePNames.DEFAULT_PROXY);
|
|
||||||
}
|
|
||||||
|
|
||||||
//// HTTP entity operations
|
//// HTTP entity operations
|
||||||
|
|
||||||
public Request body(final HttpEntity entity) {
|
public Request body(final HttpEntity entity) {
|
||||||
|
|
|
@ -121,6 +121,11 @@ public class Response {
|
||||||
|
|
||||||
public void saveContent(final File file) throws IOException {
|
public void saveContent(final File file) throws IOException {
|
||||||
assertNotConsumed();
|
assertNotConsumed();
|
||||||
|
StatusLine statusLine = response.getStatusLine();
|
||||||
|
if (statusLine.getStatusCode() >= 300) {
|
||||||
|
throw new HttpResponseException(statusLine.getStatusCode(),
|
||||||
|
statusLine.getReasonPhrase());
|
||||||
|
}
|
||||||
FileOutputStream out = new FileOutputStream(file);
|
FileOutputStream out = new FileOutputStream(file);
|
||||||
try {
|
try {
|
||||||
HttpEntity entity = this.response.getEntity();
|
HttpEntity entity = this.response.getEntity();
|
||||||
|
|
|
@ -0,0 +1,103 @@
|
||||||
|
~~ ====================================================================
|
||||||
|
~~ Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
~~ or more contributor license agreements. See the NOTICE file
|
||||||
|
~~ distributed with this work for additional information
|
||||||
|
~~ regarding copyright ownership. The ASF licenses this file
|
||||||
|
~~ to you under the Apache License, Version 2.0 (the
|
||||||
|
~~ "License"); you may not use this file except in compliance
|
||||||
|
~~ with the License. You may obtain a copy of the License at
|
||||||
|
~~
|
||||||
|
~~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~~
|
||||||
|
~~ Unless required by applicable law or agreed to in writing,
|
||||||
|
~~ software distributed under the License is distributed on an
|
||||||
|
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
~~ KIND, either express or implied. See the License for the
|
||||||
|
~~ specific language governing permissions and limitations
|
||||||
|
~~ under the License.
|
||||||
|
~~ ====================================================================
|
||||||
|
~~
|
||||||
|
~~ This software consists of voluntary contributions made by many
|
||||||
|
~~ individuals on behalf of the Apache Software Foundation. For more
|
||||||
|
~~ information on the Apache Software Foundation, please see
|
||||||
|
~~ <http://www.apache.org/>.
|
||||||
|
|
||||||
|
----------
|
||||||
|
HttpComponents Fluent HC Module
|
||||||
|
----------
|
||||||
|
----------
|
||||||
|
----------
|
||||||
|
|
||||||
|
Fluent HC
|
||||||
|
|
||||||
|
This module provides an easy to use facade API for HttpClient based on the concept of
|
||||||
|
a fluent interface. Fluent HC exposes only the most fundamental functions of HttpClient
|
||||||
|
and is likely to be suitable mostly for simple use cases that do not require the full
|
||||||
|
flexibility of HttpClient. For instance, Fluent HC API relieves the users from having
|
||||||
|
to deal with resource deallocation and connection management. In most cases, though,
|
||||||
|
this comes at a price of having to buffer content of response messages in memory. However,
|
||||||
|
users can still use custom response handlers to process response streams of arbitrary
|
||||||
|
length.
|
||||||
|
|
||||||
|
----------------------------------
|
||||||
|
String result1 = Request.Get("http://somehost/")
|
||||||
|
.version(HttpVersion.HTTP_1_1)
|
||||||
|
.connectTimeout(1000)
|
||||||
|
.socketTimeout(1000)
|
||||||
|
.viaProxy(new HttpHost("myproxy", 8080))
|
||||||
|
.execute().returnContent().asString();
|
||||||
|
|
||||||
|
String result2 = Request.Post("http://somehost/do-stuff")
|
||||||
|
.version(HttpVersion.HTTP_1_1)
|
||||||
|
.useExpectContinue()
|
||||||
|
.viaProxy(new HttpHost("myproxy", 8080))
|
||||||
|
.bodyForm(Form.form().add("username", "vip").add("password", "secret").build())
|
||||||
|
.execute().returnContent().asString();
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
----------------------------------
|
||||||
|
Document result3 = 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
Project reports:
|
||||||
|
|
||||||
|
{{{./apidocs/index.html}Javadocs}}
|
||||||
|
|
||||||
|
{{{./xref/index.html}Project sources}}
|
||||||
|
|
||||||
|
{{{./dependencies.html}Dependencies}}
|
||||||
|
|
||||||
|
{{{./issue-tracking.html}Issue Tracking}}
|
|
@ -0,0 +1 @@
|
||||||
|
@import url("../../../css/hc-maven.css");
|
|
@ -0,0 +1,38 @@
|
||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<!--
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
====================================================================
|
||||||
|
|
||||||
|
This software consists of voluntary contributions made by many
|
||||||
|
individuals on behalf of the Apache Software Foundation. For more
|
||||||
|
information on the Apache Software Foundation, please see
|
||||||
|
<http://www.apache.org/>.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project name="HttpClient">
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<menu name="HttpClient Overview">
|
||||||
|
<item name="Description" href="../index.html"/>
|
||||||
|
<item name="Examples" href="../examples.html"/>
|
||||||
|
</menu>
|
||||||
|
<menu ref="modules" />
|
||||||
|
<menu ref="reports"/>
|
||||||
|
</body>
|
||||||
|
</project>
|
Loading…
Reference in New Issue