`
西蜀石兰
  • 浏览: 119189 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于org.apache.commons.httpclient源码的一些跟进

 
阅读更多
最近想要把一个比较小的文件存到数据库中,网上搜了一大堆乱七八糟的博客,有些点击量甚至过了10万,不是太旧,就是api没看懂,于是自己跟了一下org.apache.commons.httpclient的源码,这里做一下记录;

对于懒癌程序员而言,希望拿到手能用到的代码;稍微有点追求的,对于一些看起来比较蛋疼的代码,会想着能不能去优化,为什么一定要写这些一成不变的代码,能不能不写?我可以告诉你,网上很多博客的代码,其实是过时的,尽量别用百度,搜出来的东西,太尼玛坑!

对于一个函数,无非就是入参和返回,http请求也是如此。对于http请求的入参,HttpMethod提供了两种方法来设置参数
//会直接将String拼接到你的url之后
HttpMethod.setQueryString(String s)
//将数组解析后拼接到参数中
HttpMethod.setQueryString(NameValuePair[] var1)

当然,你也可以更加粗暴,直接将参数写到url里面,这个就看对方怎么解析了。对方如果是从requestBody里面解析,有可能解析不到你的参数,这一点我并没有尝试。
这里有一个坑,如果你的url里面有了参数,之后调用setQueryString方法设置参数,会报错,源码跟进之后,会发现,拼接时加了?,具体代码如下:
public URI getURI() throws URIException {
        StringBuffer buffer = new StringBuffer();
        if(this.httphost != null) {
            buffer.append(this.httphost.getProtocol().getScheme());
            buffer.append("://");
            buffer.append(this.httphost.getHostName());
            int charset = this.httphost.getPort();
            if(charset != -1 && charset != this.httphost.getProtocol().getDefaultPort()) {
                buffer.append(":");
                buffer.append(charset);
            }
        }

        buffer.append(this.path);
        if(this.queryString != null) {
            buffer.append('?');
            buffer.append(this.queryString);
        }

        String charset1 = this.getParams().getUriCharset();
        return new URI(buffer.toString(), true, charset1);
    }


对于返回,api提供三方方式,分别返回String、byte[]、inputStream,不少博客里拿到inputStream之后读出byte[]再转成String,看到那些博客的时候,我觉得不合理,这种固定的代码,应该直接对外提供接口,稍微看了下方法,果然,api直接提供了。
private static void get() throws Exception {
        HttpClient client = new HttpClient();
        HttpMethod getMethod = new GetMethod("http://www.baidu.com");
        client.executeMethod(getMethod);
        //返回String
        getMethod.getResponseBodyAsString();
        //返回byte[]
        getMethod.getResponseBody();
        //返回InputStream,对于特别大的返回或者未知大小的返回,推荐用InputStream流读取
        getMethod.getResponseBodyAsStream();
        //不需要知道http的头如何设置,直接用String构造指定编码即可
        new String(getMethod.getResponseBody(), "utf-8");
    }

真正的用,还需要根据返回的状态码去读取,至于异常处理,这种底层方法的异常,直接往上抛即可。
分享到:
评论

相关推荐

    org.apache.commons.httpclient 远程下载文件

    import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; import java.io.FileOutputStream; import java.io.IOException; public class ServletTest { ...

    apache commonshttpclient源码

    真正的 org.apache.commons.httpclient.source 源码

    org.apache.commons 常用jar 以及部分源码

    commons-httpclient-3.0.jar commons-fileupload-1.2.1.jar commons-discovery-0.2.jar commons-digester-1.6.jar commons-dbcp-1.2.2.jar commons-collections-3.2.1.jar commons-codec-1.3.jar commons-chain-1.1...

    org.apache.tools.zip.*和org.apache.commons.httpclient.*实现远程文件打包下载,支持中文文件名

    这篇博客“org.apache.tools.zip.*和org.apache.commons.httpclient.*实现远程文件打包下载,支持中文文件名”探讨了如何利用Apache开源库来实现这个功能。Apache的`tools.zip`和`commons-httpclient`模块为开发者...

    apache httpclient 源码和 jar包

    这个资源包括Apache HttpClient的源码和jar包,这意味着我们可以深入理解其内部工作原理并进行定制化开发。 源码部分: 1. **源码分析**:源码是未经反编译的,这意味着我们可以直接阅读和理解开发者原始的编程思路...

    commons-httpclient-3.0.jar

    6. **源码可用**:在提供的"commons-httpclient-3.0-sources.jar"中,包含了HttpClient 3.0的源代码,这对于开发者理解和调试代码,以及扩展和定制功能非常有帮助。 7. **与其他Apache Commons组件的集成**:...

    apache kylin4.0.1 源码编译所需jar包

    apache-kylin-4.0.1 源码所需jar包,一键打包。 只包含jar,不包括js相关内容 内部列表: kylin-shaded-guava-3.1.0.jar commons-configuration-1.6.jar RoaringBitmap-0.7.36-os-kylin-r1.jar commons-compiler-...

    commons-httpclient-3.0.1-src.zip

    《Apache Commons HttpClient 3.0.1 源码解析》 Apache Commons HttpClient 是一个流行的 Java HTTP 客户端库,它提供了丰富的功能,用于执行HTTP请求并处理响应。源码包 "commons-httpclient-3.0.1-src.zip" 包含...

    httpclient测试请求方法

    import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient....

    JAVA-用HttpClient来模拟浏览器GET,POST.docx

    import org.apache.commons.httpclient.*; import org.apache.commons.httpclient.methods.*; / * 最简单的 HTTP 客户端,用于演示通过 GET 或者 POST 方式访问某个页面 * @author Liudong */ public class ...

    apache-commons源码及jar文件

    Apache Commons是一个非常有用的工具包,解决各种实际的通用问题。(附件中提供了该工具包的jar包,及源文件以供研究) BeanUtils Commons-BeanUtils 提供对 Java 反射和自省API的包装 Betwixt Betwixt提供将 ...

    apache-common最全的源码

    Apache Commons 是一个由 Apache 软件基金会维护的开源项目,它提供了一系列的Java类库,这些类库针对常见的编程任务提供了简洁、高效且实用的解决方案。"apache-common最全的源码" 提供了该项目的完整源代码,这...

    httpclient 4.5 所需的jar包 附带源码

    4. **commons-io-2.4.jar**:Apache Commons IO是Java IO操作的实用工具类库,包含了各种文件操作、流操作、I/O异常处理等功能,为HTTPClient提供便利的IO操作支持。 描述中还提到了一个名为`ClientSSL.java`的源码...

    Commons-httpClient3.1.Jar,htmllexer.jar,htmlparser.jar

    在IT领域,开发爬虫和进行网页分析是常见的任务,而这通常需要依赖一些特定的库或框架。在提供的信息中,我们关注的是三个Java库:`Commons-httpClient3.1.jar`, `htmllexer.jar`, 和 `htmlparser.jar`。这些库在...

    HttpClient 学习精髓

    1. **从官网下载源码包**:访问官方地址[http://jakarta.apache.org/commons/httpclient/downloads.html](http://jakarta.apache.org/commons/httpclient/downloads.html),下载对应的版本。 2. **添加Maven依赖**:...

    使用httpClient访问https+443端口号。

    1. **导入依赖**:文件列表中包含了与HttpClient相关的jar文件,如`commons-httpclient-3.1.jar`和`httpclient-4.0.3.jar`,这些都是HttpClient的旧版和新版库,`httpcore-4.0.1.jar`是核心协议库,`commons-logging...

    httpclient 3.1 jar包 手册 源代码

    import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; public class HttpClientExample { public static void main(String[] args) { HttpClient client ...

    Heritrix源码分析

    1. `org.apache.commons.httpclient`:这个包封装了Apache HttpClient库,它是Heritrix获取网页内容的基础。HttpClient提供了对HTTP协议的全面支持,包括请求和响应的构建、连接管理、重试策略等。 2. `org.apache....

    HttpClient4基础1--通过匿名代理访问网页

    HttpClient是Apache基金会开发的一个HTTP客户端库,主要用于在Java应用程序中发送和接收HTTP请求。这个库在版本4中引入了许多改进,使得它成为处理网络通信的强大工具。本篇将重点介绍HttpClient4的基础用法,特别是...

    httpClient入门

    HttpClient库的核心类是`org.apache.http.client.HttpClient`,它是执行HTTP请求的入口点。通过实例化这个类,我们可以创建一个HTTP客户端对象,然后调用其方法来发送请求并接收响应。在初始化HttpClient时,通常...

Global site tag (gtag.js) - Google Analytics