httpclient上传文件使用

系统 1953 0

org.apache.commons.httpclient.HttpClient hc = new
      org.apache.commons.httpclient.HttpClient();
  hc.getHostConfiguration().setHost("localhost", 80);
  org.apache.commons.httpclient.methods.MultipartPostMethod mpm = new
      org.apache.commons.httpclient.methods.MultipartPostMethod("/upload.asp");
  mpm.addParameter("username", "username");
  mpm.addParameter("file1", "文件名.txt", new java.io.File("c://boot.ini"));
  mpm.addParameter("file2", "再来一个文件.txt", new java.io.File("c://boot.ini"));
  hc.executeMethod(mpm);
  System.out.println(mpm.getResponseBodyAsString());
org.apache.commons.httpclient.HttpClient hc = new
      org.apache.commons.httpclient.HttpClient();
  hc.getHostConfiguration().setHost("localhost", 80);
  org.apache.commons.httpclient.methods.MultipartPostMethod mpm = new
      org.apache.commons.httpclient.methods.MultipartPostMethod("/upload.asp");
  mpm.addParameter("username", "username");
  mpm.addParameter("file1", "文件名.txt", new java.io.File("c://boot.ini"));
  mpm.addParameter("file2", "再来一个文件.txt", new java.io.File("c://boot.ini"));
  hc.executeMethod(mpm);
  System.out.println(mpm.getResponseBodyAsString());

package  com.test;

import  org.apache.commons.httpclient.Cookie;
import  org.apache.commons.httpclient.HttpClient;
import  org.apache.commons.httpclient.NameValuePair;
import  org.apache.commons.httpclient.cookie.CookiePolicy;
import  org.apache.commons.httpclient.cookie.CookieSpec;
import  org.apache.commons.httpclient.methods.GetMethod;
import  org.apache.commons.httpclient.methods.PostMethod;

public   class  FormLoginDemo  {
 
static   final  String LOGON_STR  =   " localhost " ;
 
static   final   int  LOGON_PORT  =   8080 ;
 
 
public   static   void  main(String[] args)  throws  Exception {
  HttpClient client 
=   new  HttpClient();
  
  client.getHostConfiguration().setHost(LOGON_STR, LOGON_PORT);
  
//    模拟登录页面login.jsp->main.jsp
  PostMethod post  =   new  PostMethod( " /a.jsp " );
  NameValuePair name 
=   new  NameValuePair( " name " " Id " );
  NameValuePair pass 
=   new  NameValuePair( " password "  ,  " Id " );
  
  post.setRequestBody(
new  NameValuePair[] {name, pass} );
  
  
int  status  =  client.executeMethod(post);
  
  System.out.println(post.getResponseBodyAsString());
  post.releaseConnection();
  
  
// 查看cookie 信息
  CookieSpec cookiespec  =  CookiePolicy.getDefaultSpec();
  Cookie[] cookies 
=  cookiespec.match(LOGON_STR, LOGON_PORT,  " / " false , client.getState().getCookies());
  
  
if  (cookies.length  ==   0 ) {
   System.out.println(
" none " );
  }
else {
   
for  ( int  i  =   0 ; i <  cookies.length; i ++ ) {
    System.out.println(cookies[i].toString());
   }

  }

  
  
// 访问所需的页面main2.jsp
  GetMethod get  =   new  GetMethod( " /b.jsp " );
  client.executeMethod(get);
  System.out.println(get.getResponseBodyAsString());
  get.releaseConnection();
  
 }

}

 

针对采用HttpClient 文件上传 的其实和一般上传一样,将文件以流的形式作为请求的信息RequestBody 体即可

必须注意中文问题:

关于httpclient上传文件是中文名称的处理

在一个项目中,上传文件采用httpclient来post文件,在测试中发现如果文件是中文名称,上传的文件是乱码
经过跟踪发现,原来在httpclient中进行了编码,为ASCII,所以为乱码
org\apache\commons\httpclient\util包下EncodingUtil.Java

/**
*ConvertsthespecifiedstringtobytearrayofASCIIcharacters.
*
*@paramdatathestringtobeencoded
*@returnThestringasabytearray.
*
*@since3.0
*/
publicstaticbyte[]getAsciiBytes(finalStringdata){

if(data==null){
thrownewIllegalArgumentException("Parametermaynotbenull");
}

http://www.mscto.com

 

try{
returndata.getBytes("US-ASCII");
}catch(UnsupportedEncodingExceptione){
thrownewHttpClientError("HttpClientrequiresASCIIsupport");
}
}

解决方法:
1在接收端处理ascii数据
2重新编译httpclient包,即更改上面的方法,改为iso8859-1或utf-8
这样可以解决中文的问题

采用httpclient是一个很好的方法,可以给你其他的系统post数据,好像Delphi中的indy控件,

httpclient上传文件使用


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论