`
winebibber
  • 浏览: 118347 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

HttpClient的一些技巧

    博客分类:
  • Java
阅读更多

使用HttpClient过程中经常会碰到以下的问题,明白了这些技巧,处理起来将会非常的简单。

一、字符编码
    某目标页的编码可能出现在两个地方,第一个地方是服务器返回的 http 头中,另外一个地方是得到的 html/xml 页面中。
    1、在 http 头的 Content-Type 字段可能会包含字符编码信息。
      例如可能返回的头会包含这样子的信息:Content-Type: text/html; charset=UTF-8。这个头信息表明该页的编码是UTF-8,但是服务器返回的头信息未必与内容能匹配上。比如对于一些双字节语言国家,可能服务 器返回的编码类型是UTF-8,但真正的内容却不是UTF-8编码的,因此需要在另外的地方去得到页面的编码信息;但是如果服务器返回的编码不是UTF- 8,而是具体的一些编码,比如gb2312等,那服务器返回的可能是正确的编码信息。通过method对象的getResponseCharSet()方 法就可以得到http头中的编码信息。
    2、对于象xml或者html这样的文件,允许在页面中直接指定编码类型。比如在html中会有<meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>这样的标签;或者在xml中会有<?xml version="1.0" encoding="gb2312"?>这样的标签,在这些情况下,可能与http头中返回的编码信息冲突,需要用户自己判断到底那种编码类型应该 是真正的编码。

二、自动转向
    根据RFC中对自动转向的定义,主要有两种:301和302。301表示永久的移走(Moved Permanently),当返回的是301,则表示请求的资源已经被移到一个固定的新地方,任何向该地址发起请求都会被转到新的地址上。302表示暂时 的转向,比如在服务器端的servlet程序调用了sendRedirect方法,则在客户端就会得到一个302的代码,这时服务器返回的头信息中 location的值就是sendRedirect转向的目标地址。
HttpClient支持自动转向处理,但是象POST和PUT方式这种要求接受后继服务的请求方式,暂时不支持自动转向,因此如果碰到POST方式提交 后返回的是301或者302的话需要自己处理。需要注意的是,有时候location返回的可能是相对路径,因此需要对location返回的值做一些处 理才可以发起向新地址的请求。
    另外除了在头中包含的信息可能使页面发生重定向外,在页面中也有可能会发生页面的重定向。引起页面自动转发的标签是:<meta http-equiv="refresh" content="5; url=http://www.ibm.com/">。如果你想在程序中也处理这种情况的话得自己分析页面来实现转向。需要注意的是,在上面那个标 签中url的值也可以是一个相对地址,如果是这样的话,需要对它做一些处理后才可以转发。

三、代理服务器
    HttpClient中使用代理服务器非常简单,调用HttpClient中setProxy方法就可以,方法的第一个参数是代理服务器地址,第二个参数是端口号。另外HttpClient也支持SOCKS代理。

<!---->    httpClient.getHostConfiguration().setProxy(hostName,port);


    HttpClient对http协议的支持非常好,使用起来很简单,功能也很强大,具有足够的灵活性和扩展性。对于想在Java应用中直接访问http资源的编程人员来说,HttpClient是一个不可多得的好工具。

分享到:
评论

相关推荐

    android 学习笔记6-HttpClient 多线程下载 断点续传 进度条 源码关联

    3、使用异步HttpClient发送请求,可以在github上找一些别人已经写好的代码,封装度比较高,直接拿来用。 4、多线程下载:使用RandomAccessFile输出流写 5、多线程下载-断点续传:使用临时文件记录当前下载的数据,...

    java实现HttpClient异步请求资源的方法

    主要介绍了java实现HttpClient异步请求资源的方法,实例分析了java基于http协议实现异步请求的技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    maven-tutorial:Apache Maven,httpclient,tomcat,ant和tile指南

    1. Maven基础 2. Maven项目开发指南3. Maven插件4.技巧和窍门5.外部有用链接 GitHub存储库: 重要的Java开发人员指南

    Android开发之HttpClient异步请求数据的方法详解【附demo源码下载】

    主要介绍了Android开发之HttpClient异步请求数据的方法,结合实例形式较为详细的分析了Android HttpClient异步请求数据的相关操作技巧,并附带完整demo源码供读者下载参考,需要的朋友可以参考下

    对象转换成JSON和Map

    简单的对象转换成json对象,和把对象转换成map的技巧

    php实现多张图片上传加水印技巧

    复制代码 代码如下: &lt;?... $formatMsg = “暂不支持该文件格式,请用图片处理软件将图片转换为GIF、JPG、PNG格式。”; //读取水印文件 if(!empty($waterImage) && file_exists($waterImage)) { $isWaterImage = TRUE...

    Android开发技巧总汇(个人总结)

    17.通过HttpClient从指定server获取数据 22 18.拖动Button获得位置 23 19.代码安装apk包 25 20.给模拟器打电话发短信 26 21.从google搜索内容 26 22.浏览网页 26 23.显示地图 26 25.拨打电话 27 26.调用发...

    Android 开发技巧

    9.40、通过HTTPCLIENT从指定SERVER获取数据 265 9.41、通过FTP传输文件,关闭UI获得返回码 266 9.42、激活JAVASCRIPT打开内部链接 266 9.43、清空手机COOKIES 267 9.44、检查SD卡是否存在并且可以写入 267 9.45、...

    好程序员Java教程之如何用Jsoup实现爬虫技术

     ​ Jsoup拥有十分方便的api来处理html文档,比如参考了DOM对象的文档遍历方法,参考了CSS选择器的用法等等,因此我们可以使用Jsoup快速地掌握爬取页面数据的技巧。  2.快速开始 1)编写HTML页面  页面中表格的...

    blockchyp-java:BlockChyp Java SDK

    为了避免与Java 1.6的兼容性,我们避免了一些我们喜欢的较新的Java功能,例如流和泛型。 我们尽力避免在可能的情况下为您引入类路径问题。 HTTP交互使用commons-httpclient-3.1完成,我们还使用commons-lang,...

    godot-demos:Godot游戏引擎的数十个免费和开源演示

    :right_arrow: 在和上关注我们,以获取免费的游戏创建教程,技巧和新闻! 获得我们的之一,以支持我们在自由软件方面的工作。 链接 (高级) GDquest在 , 和 可用的演示 您可以在/2018文件夹中找到所有Godot 3...

    Java 知识汇总(资源,工具,笔记,源码,文章,文档分类整理).zip

    多线程,虚拟机,性能优化技巧,反射,复杂算法(红黑树,贪心,动态规划等),网络通信; ## 功能模块 - 【Okhttp接口测试】在[com.gradle.http.uas](/tree/master/src/main/java/com/gradle/api/uas)包名下; - 【Java...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--Activity常用小技巧 |--Activity按返回直接回到桌面 |--aidl之结合反射获取应用缓存大小等空间占用 |--aidl调用系统service未公开的方法挂电话 |--aidl调用系统未公开的方法代码示例2 |--android dp和px之间转换 ...

    java jdk实列宝典 光盘源代码

    使用异常的技巧和原则; 7 IO输入输出流 获取文件的基本信息;列出指定目录下的文件,并可过滤文件;创建文件和目录;删除文件和目录;移动文件和目录; 复制文件和目录;一个简单的文件搜索器; 多种方式读文件内容...

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

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

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

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

Global site tag (gtag.js) - Google Analytics