10月 28

HttpClient 4.3教程 第六章 HTTP缓存


6.1.基本概念

HttpClient的缓存机制提供一个与HTTP/1.1标准兼容的缓存层 – 相当于Java的浏览器缓存。HttpClient缓存机制的实现遵循责任链(Chain of Responsibility)设计原则,默认的HttpClient是没有缓存的,有缓存机制的HttpClient可以用来临时替代默认的HttpClient,如果开启了缓存,我们的请求结果就会从缓存中获取,而不是从目标服务器中获取。如果在Get请求头中设置了If-Modified-Since或者If-None-Match参数,那么HttpClient会自动向服务器校验缓存是否过期。 继续阅读

10月 25

下载百度音乐无损品质音乐


使用百度音乐时,可以添加收藏,收藏后的音乐列表会保存在http://yinyueyun.baidu.com中,并且提供下载链接。用java简单写了个下载自己收藏音乐的程序,过程中发现对于VIP的无损音乐,下载链接已经给出来了,只是在前台做了限制,这个,这个。。。。(Bug已经报给百度音乐,这里的代码只为方便自己和代码分享)。

本来想用用户名和密码登陆百度账号,可是在登陆时需要传递一个参数callback,这个参数不是服务器发送过来的,怀疑是根据什么参数在本地计算出来的,看不太懂js,这个功能就没实现。

使用步骤如下: 继续阅读

10月 23

Ubuntu 13.10 eclipse菜单栏失效


Ubuntu 13.10已经发布,从13.04升级成功后,发现Eclipse菜单栏点击后,不能展示下拉列表了,但是快捷键有效。这个应该算是Ubuntu Unity的bug,bug详情,Ubuntu官方还没有解决该问题,不过国外论坛已经有暂时的解决方法:不要直接启动eclipse,使用env UBUNTU_MENUPROXY= /home/user/eclipse/eclipse启动eclipse,注意等号和eclipse路径之间有个空格,或者建立一个Eclipse的快捷方式,eclipse.desktp内容如下: 继续阅读

10月 22

HttpClient4.3 教程 第五章 快速API


5.1.Easy to use facade API

HttpClient从4.2开始支持快速api。快速api仅仅实现了HttpClient的基本功能,它只要用于一些不需要灵活性的简单场景。例如,快速api不需要用户处理连接管理和资源释放。

下面是几个使用快速api的例子:

    // 执行一个get方法,设置超时时间,并且将结果变成字符串
    Request.Get("https://www.yeetrack.com/")
            .connectTimeout(1000)
            .socketTimeout(1000)
            .execute().returnContent().asString(); 继续阅读 
10月 18

android-maven-plugin 点9图片问题


使用android-maven-plugin插件搭建android CI的时候,遇到点9图片报错问题,报错信息如下:

    ERROR: 9-patch image Project/res/drawable-  hdpi/input_03_mid.9.png malformed.
    [INFO]        Must have one-pixel frame that is either transparent or white.
    [INFO] ERROR: Failure processing PNG image Project/res/drawable-hdpi/input_03_mid.9.png

然后是报一堆资源找不到的错误。

项目在Eclipse、Idea等ide下编译、运行正常。 继续阅读

10月 17

HttpClient4.3教程 第四章 HTTP认证


HttpClient既支持HTTP标准规范定义的认证模式,又支持一些广泛使用的非标准认证模式,比如NTLM和SPNEGO。

4.1.用户凭证

任何用户认证的过程,都需要一系列的凭证来确定用户的身份。最简单的用户凭证可以是用户名和密码这种形式。UsernamePasswordCredentials这个类可以用来表示这种情况,这种凭据包含明文的用户名和密码。

这个类对于HTTP标准规范中定义的认证模式来说已经足够了。

    UsernamePasswordCredentials creds = new UsernamePasswordCredentials("user", "pwd"); 继续阅读 
10月 13

HttpClient4.3教程 第三章 Http状态管理



最初,Http被设计成一个无状态的,面向请求/响应的协议,所以它不能在逻辑相关的http请求/响应中保持状态会话。由于越来越多的系统使用http协议,其中包括http从来没有想支持的系统,比如电子商务系统。因此,http支持状态管理就很必要了。

当时的web客户端和服务器软件领先者,网景(netscape)公司,最先在他们的产品中支持http状态管理,并且制定了一些专有规范。后来,网景通过发规范草案,规范了这一机制。这些努力促成 RFC standard track制定了标准的规范。但是,现在多数的应用的状态管理机制都在使用网景公司的规范,而网景的规范和官方规定是不兼容的。因此所有的浏览器开发这都被迫兼容这两种协议,从而导致协议的不统一。

3.1.Http cookies

所谓的Http cookie就是一个token或者很短的报文信息,http代理和服务器可以通过cookie来维持会话状态。网景的工程师把它们称作“magic cookie”。 继续阅读

10月 11

CloseableHttpClient加载证书来访问https网站

对安全性有要求的网站一般使用https来加密传输的请求和响应。https离不开证书,关于证书不在多说。Apache的HttpClient支持https,下面是官方的样例程序,程序中使用了my.store这个文件,这个文件不是网站的证书,而是一份包含自己密码的自己的证书库。这个文件是需要自己生成的,使用jdk中的keytool命令可以很方便的生成my.store文件。步骤如下(以支付宝为例):

  1. 浏览器(以chrome为例)访问https://www.alipay.com/,点击域名左侧的小锁,可以查看支付宝的证书信息

    继续阅读
10月 11

HttpClient4.3教程 第二章 连接管理


2.1.持久连接

两个主机建立连接的过程是很复杂的一个过程,涉及到多个数据包的交换,并且也很耗时间。Http连接需要的三次握手开销很大,这一开销对于比较小的http消息来说更大。但是如果我们直接使用已经建立好的http连接,这样花费就比较小,吞吐率更大。

HTTP/1.1默认就支持Http连接复用。兼容HTTP/1.0的终端也可以通过声明来保持连接,实现连接复用。HTTP代理也可以在一定时间内保持连接不释放,方便后续向这个主机发送http请求。这种保持连接不释放的情况实际上是建立的持久连接。HttpClient也支持持久连接。

2.2.HTTP连接路由 继续阅读

10月 09

HttpClient 4.3教程


httpclient发布了4.3版,改动比较大,之前常用的一些类和方法已经不推荐使用了,在这里对httpclient4.3.1的官方英文文档进行翻译,希望可以坚持到最后。目录如下:

前言

  1. HttpClient的定义
  2. HttpClient不能做的事情

1. 基本概念 继续阅读