nighty

折腾的年华
posts - 37, comments - 143, trackbacks - 0, articles - 0

httpclient3.1使用小结

Posted on 2008-06-11 15:18 寒武纪 阅读(6887) 评论(8)  编辑  收藏 所属分类: Java

Jakarta的httpclient3.1是最新版本,项目中需要用程序模拟浏览器的GET和POST动作。在使用过程中遇到不少问题。
1. 带附件的POST提交
    最开始都是使用MultipartPostMethod这个类,现在已经废弃这个类了。API说明:Deprecated. Use MultipartRequestEntity in conjunction with PostMethod instead.   使用PostMethod可以实现的功能,就没有必要再弄一个MultipartPostMethod了。下面是一段最简单的示例:

PostMethod post = new PostMethod();
        NameValuePair[] pairs 
= new NameValuePair[2];
        pairs[
0= new NameValuePair("para1""value1");
        pairs[
0= new NameValuePair("para2""value2");
        post.setRequestBody(pairs);
        HttpClient client 
= new HttpClient();
        
try {
            client.executeMethod(post);
        }
 catch (HttpException e) {
            e.printStackTrace();
        }
 catch (IOException e) {
            e.printStackTrace();
        }
   这是针对一般的form形式的提交,而且这个form里面不带附件的。如果带附件,那么这种方法就不起作用,附件上传的参数和普通参数无法一同在服务器获取到。org.apache.commons.httpclient.methods.multipart 这个包就是为处理文件上传这种多形式参数的情况的。最主要的类是Part(代表一种post object),它有二个比较重要的子类:FilePart和StringPart,一个是文件的参数,另一个就是普通的文本参数。它的典型使用方法如下:
String url = "http://localhost:8080/HttpTest/Test";
         PostMethod postMethod 
= new PostMethod(url);
         
         StringPart sp 
= new StringPart("TEXT""testValue");
         FilePart fp 
= new FilePart("file""test.txt"new File("./temp/test.txt"));
         
         MultipartRequestEntity mrp
= new MultipartRequestEntity(new Part[]{sp, fp}, postMethod
                 .getParams());
         postMethod.setRequestEntity(mrp);
         
         
//执行postMethod
         HttpClient httpClient = new HttpClient();
         
try {
            httpClient.executeMethod(postMethod);
        }
 catch (HttpException e) {
            e.printStackTrace();
        }
 catch (IOException e) {
            e.printStackTrace();
        }
    在第二行PostMethod postMethod = new PostMethod();后面,有人说需要使用postMehtod.setRequestHeader("Content-type", "multipart/form-data"); Content-type的请求类型进行更改。但是我在使用过程没有加上这一句,查了一下httpCleint的默认Content-type是application/octet-stream。应该是没有影响的。对于MIME类型的请求,httpclient建议全用MulitPartRequestEntity进行包装,就是上面的用法。

2.  参数中文的处理问题
    httpclient的默认编码都是ISO-8859-1,那肯定就无法支持中文参数了。引用一下这篇文章:http://thinkbase.net/w/main/Wiki?HttpClient+POST+%E7%9A%84+UTF-8+%E7%BC%96%E7%A0%81%E9%97%AE%E9%A2%98 ,按照作者的说法,就可以正常解决中文编码的问题。其中最关键的是修改EncodingUtil这个类的一个方法实现。另外,FilePart和StringPart的构造方法都有一个带编码指定的参数,为了减少问题的出现,建议所有的都带上统一的编码,包括postMethod.getParams()。示例如下:
String url = "http://localhost:8080/HttpTest/Test";
         PostMethod postMethod 
= new PostMethod(url);
         
         StringPart sp 
= new StringPart("TEXT""testValue""GB2312");
         FilePart fp 
= new FilePart("file""test.txt"new File("./temp/test.txt"), null"GB2312");
         
         postMethod.getParams().setContentCharset(
"GB2312");
         MultipartRequestEntity mrp
= new MultipartRequestEntity(new Part[]{sp, fp}, postMethod
                 .getParams());
         postMethod.setRequestEntity(mrp);
         
         
//执行postMethod
         HttpClient httpClient = new HttpClient();
         
try {
            httpClient.executeMethod(postMethod);
        }
 catch (HttpException e) {
            e.printStackTrace();
        }
 catch (IOException e) {
            e.printStackTrace();
        }



刚进场的时候戏就落幕

Feedback

# re: httpclient3.1使用小结  回复  更多评论   

2008-06-13 15:49 by ~上善若水~
传智播客ajax全套内部视频独家发布,免费下载

1.ajax 入门

2.ajax 原理

3.ajax 简单实例

4.ajax 无限级联动菜单

5.ajax 简易聊天室

6.ajax 开源框架简介

7.DWR 框架源码分析一

8.DWR 框架源码分析二

9.DWR 框架源码分析三

10.DWR 框架源码分析四

11.DWR框架源码分析五

12.SSH + DWR完成商城驱动

13. Extjs 简介

14 Extjs  简单实例

15.SSH + Extjs 开发系列之OA一

16. SSH + Extjs 开发系列之OA二

17. SSH + Extjs 开发系列之OA三

18. SSH + Extjs 开发系列之OA四

19 .SSH + Extjs 开发系列之OA五

20. SSH + Extjs 开发系列之OA六

21. SSH + Extjs 开发系列之OA七

22. SSH + Extjs 开发系列之OA八

23.SSH + Extjs 开发系列之OA九

24.SSH + Extjs 开发系列之OA十

25. ajax 前景之我见

下载地址:http://www.ibeifeng.com/read.php?tid=2338&u=5043

# re: httpclient3.1使用小结  回复  更多评论   

2008-09-05 13:49 by HttpClient

标题 请输入标题
姓名 请输入你的姓名
主页
请输入验证码
验证码 *

内容(请不要发表任何与政治相关的内容) 请输入评论内容


Remember Me?
登录 使用高级评论 新用户注册 返回页首 恢复上次提交
[使用Ctrl+Enter键可以直接提交]




相关链接:
怎么优化使用asp.net ajax的网站速度
碰到技术难题?马上使用找找看!
如何使用Div+CSS布局?
淘金高阶4级全真试题(2002.1--2007.12)13套题(MP3版)

# Seo News  回复  更多评论   

2009-05-18 10:05 by Seo News
Hello everyone. Looks are part of business. A businessman should never stand out more than his customers. His mannerisms, his clothes, everything about him... Moderation is the key.
I am from Barbados and , too, and now am writing in English, give true I wrote the following sentence: "Professional seo services increase natural rankings.Webmarketing is a california seo search engine optimization company with offices in san francisco los angeles offering seo search engine."

Thanks for the help ;-), Kristin.

# re: httpclient3.1使用小结  回复  更多评论   

2010-10-23 15:28 by 张路
http://www.blogjava.net/nighty/archive/2008/06/11/207121.htm

# shi  回复  更多评论   

2010-11-09 16:29 by uk dress
too, and now am writing in English, give true I wrote the following sentence: "Professional seo services increase natural rankings.Webmarketing is a california seo search engine optimization company with offices in san francisco los angeles offering seo search engine."

# tag heuer replica  回复  更多评论   

2011-01-07 10:29 by tag heuer replica
In 1990, the john henry has tortuous lavish re-birth when ponderous was registered further.

# re: httpclient3.1使用小结  回复  更多评论   

2011-05-24 14:11 by hair extensions
I like it, I learned something today! Thanks!

# shox r2  回复  更多评论   

2011-06-02 14:29 by shox r2
ok,i know.

只有注册用户登录后才能发表评论。


网站导航: