`
西蜀石兰
  • 浏览: 116838 次
  • 性别: 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");
    }

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

相关推荐

    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.commons.httpclient 远程下载文件

    NULL 博文链接:https://sunshuaij2ee.iteye.com/blog/1354467

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

    NULL 博文链接:https://sunshuaij2ee.iteye.com/blog/1354448

    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-...

    apache-commons源码及jar文件

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

    http.rar_源码

    模拟http请求。使用org.apache.commons.httpclient包。已经过测试

    (最全)Apache Jakarta Commons 工具集及其API

    网上找不全,官网资源又太分散,自己动手,丰衣足食,这是我挨个下载的Apache jakarta commons,有windows与linux两版本(全都有源码),甚至分离出去的HttpClient都在其中,愿更多的人了解并使用Apache,这是一个...

    android-httpclient

    同时上传数据和文件的源码,需要将...另附php后台接收说明和上传jar包 apache-mime4j-0.6.jar commons-httpclient-3.1.jar commons-httpclient-3.1.jar commons-codec-1.4.jar commons-logging.jar httpmime-4.0.3.jar

    t淘淘商城项目 商城项目 视频和源码教程 详细

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0 <groupId>com.taotao</groupId> <artifactId>taotao-parent <version>0.0.1-...

    用HttpClient来模拟浏览器GET POST

    如果我们自己使用java.net.HttpURLConnection来搞定这些问题是很恐怖的事情,因此在开始之前我们先要介绍一下一个开放源码的项目,这个项目就是Apache开源组织中的httpclient,它隶属于Jakarta的commons项目,目前的...

    (正式)Java之JUnit, Log4J, Ant, HttpClient, ApacheCommons

    NULL 博文链接:https://410063005.iteye.com/blog/1738008

    JAVA上百实例源码以及开源项目源代码

    Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来...

    java网络蜘蛛程序及源码

    一个非常不错的java网络蜘蛛程序及源码,依靠apache commons httpclient v3.0,可以从网站上下载任何你指定扩展名的文件

    JAVA上百实例源码以及开源项目

     关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

    java开源包10

    JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...

    特产交易系统源码java版-pokitdok-java:适用于Java的PokitDok平台API客户端

    特产交易系统源码java版 pokitdok-java 适用于 Java 的 PokitDok 平台 API 客户端 资源 安装 通过 Maven pokitdok-java 通过 Sonatype OSS 存储库推送到 Maven Central。 组 ID:com.pokitdok 工件 ID:pokitdok-...

    java开源包8

    JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...

    java开源包101

    JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...

Global site tag (gtag.js) - Google Analytics