Use HTTPClient or HttpUrlConnection? [closed]

2020-06-03 09:48发布

问题:

We're implementing a REST client on JRE 1.4.

Seems two good options for a client REST framework are HttpClient and HttpUrlConnection.

Is there a reason to use HttpClient over the JRE's HttpUrlConnection?

回答1:

I would recommend Jakarta Commons HTTP Client over java.net.HttpUrlConnection as it is more mature and has a richer feature set. For example you can ask it to set up multi-threaded connection pool (see MultiThreadedHttpConnectionManager), and it has full support for all the HTTP methods (GET, PUT, POST, DELETE, OPTIONS, TRACE).



回答2:

I'll give you a single, concrete reason to favour Apache's HTTPClient over the JDK implementation: The JDK's HttpUrlConnection doesn't support timeouts*, Apache's HTTPClient does.

Applications should always have the ability to set timeouts when calling into other systems (databases, remote services, your own server backend, ...).

* This was fixed in Java 1.5; Java 1.5 and higher support timeouts in HttpUrlConnection.



回答3:

The Restlet Framework also has an API which works both server-side and client-side. We support pluggable client connectors, leveraging HttpURLConnection or Apache HTTP Client or our own internal HTTP client.

Our ClientResource class provides a higher level HTTP client API, with features like automatic redirection, transparent conversion between objects and representations, content negotiation and more.

Best regards,

Jerome Louvel

Restlet ~ Founder and Lead developer ~ http://www.restlet.org

Noelios Technologies ~ Co-founder ~ http://www.noelios.com



回答4:

In my experience HttpClient is slightly easier and more intuitive to use than using HttpUrlConnection, but I think it's a very subjective decision and YMMV.



回答5:

I'd go with the JRE version just so I would have one less dependency to ship around.



回答6:

... httpclient does not support kerberos/ntlm authentication for proxies etc... java's httpurlconnection will do authentication out of the box...



回答7:

The HttpUrlConnection is easy to handle. REST implementations are quite simple.

Although you must consider the whole environment about this implementation and check what will work better for you.