版本: HttpURLConnection jdk1.6;HttpClient 3.0.1
在项目中有一个特别小的相关应用,在选择时做了一下测试,之前先对两个类进行下说明:
HttpURLConnection java的标准类(java.net)
HttpClient Jakarta Commons HttpClient,提供对HTTP协议访问的封装,包括http的请求头,参数,内容体,响应等及多线程的应用。
测试代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
public class HttpClientTest {
private static String link = "http://www.baidu.com";
public static void main(String[] args) {
long a = System.currentTimeMillis();
useHttpURlConnection();
long b = System.currentTimeMillis();
System.out.println("use httpurlconnection: "+(b-a));
long c = System.currentTimeMillis();
useHttpClient();
long d = System.currentTimeMillis();
System.out.println("use httpclient: "+(d-c));
}
public static void useHttpURlConnection(){
HttpURLConnection conn = null;
URL url = null;
String result = "";
try {
url = new java.net.URL(link);
conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(10000);
conn.connect();
InputStream urlStream = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(urlStream));
String s = "";
while ((s = reader.readLine()) != null) {
result += s;
}
System.out.println(result);
reader.close();
urlStream.close();
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch(Exception e){
e.printStackTrace();
}
}
public static void useHttpClient(){
HttpClient client = new HttpClient();
GetMethod method = new GetMethod(link);
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler(3, false));
try {
int statusCode = client.executeMethod(method);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: " + method.getStatusLine());
}
byte[] responseBody = method.getResponseBody();
System.out.println(new String(responseBody));
} catch (HttpException e) {
System.err.println("Fatal protocol violation: " + e.getMessage());
e.printStackTrace();
} catch (IOException e) {
System.err.println("Fatal transport error: " + e.getMessage());
e.printStackTrace();
} finally {
method.releaseConnection();
}
}
}
测试结果:
use httpurlconnection: 47
use httpclient: 641
结果很明显示,但是在实际应用中,还是应该根据实际的需求进行取舍。
分享到:
相关推荐
对于新的项目,推荐使用Apache HttpClient 4.x或更高版本,或者考虑使用Java 7及以后版本提供的内置`java.net.HttpURLConnection`,因为这些更新的解决方案通常有更好的性能和兼容性,并且与现代Java生态系统更好地...
- 对比HttpURLConnection:HttpClient提供了更丰富的功能和更好的性能,尤其是在处理重定向、身份验证和连接管理方面。 - 对比OkHttp:OkHttp是另一个流行的Java HTTP库,它在性能和简洁性方面表现出色,但...
2. HttpClient:虽然已被废弃,但在Android 4.4(API Level 19)之前是常用的网络请求库,具有丰富的功能和良好的性能。 三、第三方网络库:OkHttp & Volley 1. OkHttp:由Square公司开发,是一个高效的HTTP客户端...
HttpClient相比Java内置的HttpURLConnection,提供了更丰富的功能和更好的性能。它具有更好的连接管理,支持更多的HTTP特性,而且在处理复杂请求和响应时更加灵活。然而,对于简单的HTTP请求,HttpURLConnection可能...
虽然Java内置的HttpURLConnection也可以执行HTTP请求,但在某些高级特性和易用性方面,HttpClient具有显著优势,如更灵活的连接管理、更完善的错误处理以及更好的性能。 六、最佳实践 1. **使用连接池**:为避免...
相比Apache HttpClient库,`HttpURLConnection`更轻量级,易于理解和使用,并且已经被Java官方推荐为首选的HTTP客户端API。 2. **上传文件的基本流程**: 文件上传通常涉及两个主要步骤:客户端(通常是用户界面)...
相比于Java内置的HttpURLConnection,HttpClient提供了更高级的功能和更好的性能。另外,与Spring的RestTemplate相比,HttpClient更适合于低级别、高度定制化的HTTP操作。 总结,HttpClient是Java中处理HTTP请求的...
3. **测试**:完成以上步骤后,你需要在Android 9.0设备或模拟器上运行应用,确保HttpClient可以正常工作,没有崩溃或错误。 尽管引入第三方jar包可以解决兼容性问题,但这种方式并不总是最佳实践。使用...
虽然`HttpURLConnection`简单易用,但在处理复杂场景如代理、认证、连接池等方面,Apache HttpClient提供了更强大的功能和更好的性能。因此,在大型项目中,开发者可能倾向于使用HttpClient。 综上所述,`...
它解决了Android自带HTTP框架(如HttpURLConnection和HttpClient)的兼容性和错误问题,提供了更稳定和高效的HTTP请求处理能力。 Retrofit:与OkHttp紧密集成的类型安全的HTTP客户端,用于Android和Java。它允许...
相比于HttpClient,HttpURLConnection在Android 2.3( Gingerbread)之后被官方推荐使用,因为它更高效、更易于使用,并且能够更好地支持HTTP/2协议和连接池。 2. 初始化HttpURLConnection: 首先,你需要创建一个...
HttpClient库在进行API调用、自动化测试、爬虫等场景下非常实用。 在这个压缩包文件“json和httpClient的所有库”中,我们可以期待找到以下内容: 1. JSON库: - **Gson**:Google提供的库,能够将Java对象转换为...
在Android中,可以使用HttpURLConnection或HttpClient类创建GET请求,并通过URL参数传递数据。服务器端的Servlet捕获请求,解析URL中的参数,执行相应的操作,然后返回结果。 3. POST请求: POST请求用于向服务器...
对于文件上传,Java通常会使用HttpURLConnection或者Apache HttpClient库来处理HTTP请求,而在服务器端,可能使用Spring Framework的MultipartFile接口来接收并处理上传的文件。文件上传可能涉及到的细节包括:文件...
这样的测试可以涵盖多个方面,如功能测试、性能测试、安全测试等,以确保产品在上线后能够稳定运行。 在Java中,有许多流行的测试框架可以帮助我们编写和执行测试,如JUnit、TestNG和Mockito等。JUnit是最常见的...
- **HttpClient**:Java内置的HttpURLConnection或Apache HttpClient库可以用于编写自定义的Web服务测试脚本。 3. **WSDL和SOAP**:WSDL文件描述了Web服务的接口,包括服务的位置、使用的消息格式和操作。SOAP则是...
在Java中,我们可以使用`java.net.HttpURLConnection`或者第三方库如Apache HttpClient、OkHttp来发送HTTP请求。通过设置超时、读取响应时间等方法,我们可以精确测量服务器的响应时间。此外,Java的`java.time`包...
8. **性能测试**: 高级的测试工具可能会包含性能测试功能,比如模拟并发请求,分析响应时间和吞吐量,这对于评估服务的性能和可扩展性非常有用。 9. **文档生成**: 另一个实用功能可能是自动生成或解析WSDL文件,...
8. **测试与优化**:测试爬虫效果,根据实际情况调整爬虫速度、并发数等参数,优化性能。 总之,Java爬虫的实现涉及网络通信、HTML解析、数据处理等多个方面,通过熟练掌握相关技术和工具,可以构建出高效稳定的...