`

httpclient 上传文件客户端处理

    博客分类:
  • java
 
阅读更多

/**
 *
 */
package cn.vwall.player;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.http.Header;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.ProtocolException;
import org.apache.http.client.RedirectStrategy;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.utils.URIUtils;
import org.apache.http.cookie.Cookie;
import org.apache.http.cookie.CookieOrigin;
import org.apache.http.cookie.CookieSpec;
import org.apache.http.cookie.CookieSpecFactory;
import org.apache.http.cookie.MalformedCookieException;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.ByteArrayBody;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.cookie.BrowserCompatSpec;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger;

/**
 * @author star.y
 * =============================================================
 * http://www.eqiao.com
 * 2013-10-4
 * Flex_Player-cn.vwall.player-HttpTools.java
 * =============================================================
 */
public class HttpTools {
    private DefaultHttpClient httpclient ;
    private FileWriter fw;
    private FileReader fr;
    private char [] cookieString =new char[4096];
    private Logger loger = Logger.getLogger(HttpTools.class);
    public HttpTools(){
        try {
            httpclient = new DefaultHttpClient();
            //setting cookie
            fw = new FileWriter("C:/cookie.txt");
            fr = new FileReader("C:/cookie.txt");
            //cookie strategy
            CookieSpecFactory csf = new CookieSpecFactory() {
                public CookieSpec newInstance(HttpParams params) {
                    return new BrowserCompatSpec() {  
                        @Override
                        public void validate(Cookie cookie, CookieOrigin origin)throws MalformedCookieException {
                            // Oh, I am easy
                        }
                    };
                }
            };
            httpclient.getCookieSpecs().register("easy", csf);
            httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY, "easy");
           
            // 手动 redirect
            httpclient.setRedirectStrategy(new RedirectStrategy() {
               
                @Override
                public boolean isRedirected(HttpRequest request, HttpResponse response,
                        HttpContext context) throws ProtocolException {
                    return false;
                }
               
                @Override
                public HttpUriRequest getRedirect(HttpRequest request,
                        HttpResponse response, HttpContext context)
                        throws ProtocolException {
                    return null;
                }
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * @param propotal
     * @param host
     * @param port
     * @param path
     * @param params
     * @return
     */
    public synchronized String get(String propotal ,String host,int port ,String path,Map<String,String> params){
            String result = "";
            HttpGet request = null;
            try{
                List<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();
                for(Map.Entry<String, String> param : params.entrySet()){
                    pairs.add(new BasicNameValuePair(param.getKey(),param.getValue()));
                }
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs, "UTF-8");
               
                String param = EntityUtils.toString(entity);
               
                URI uri = URIUtils.createURI(propotal, host, port,path, param, null);
               
                request = new HttpGet(uri);
               
                //setHeader(request);
               
                HttpResponse response = httpclient.execute(request);
               
                //读取cookie并保存文件 
                List<org.apache.http.cookie.Cookie> cookies = httpclient.getCookieStore().getCookies();   
                if (!cookies.isEmpty()) {
                    for (int i = 0; i < cookies.size(); i++) { 
                        System.out.println(cookies.get(i).toString()); 
                        fw.write(cookies.get(i).getName()+"="+cookies.get(i).getValue()+";");  
                        fw.flush();
                    }   
                } 
                readCookieToString();
                int statusCode = response.getStatusLine().getStatusCode();
                if (statusCode == HttpStatus.SC_OK) {
                    System.out.println("----------------------------------------------------------------------");
                    result = EntityUtils.toString(response.getEntity(),"UTF-8");
                    System.out.println("----------------------------------------------------------------------");
                    EntityUtils.consume(response.getEntity());
                    return result;
                }
               
            }catch(IOException e){
                loger.error(e.getMessage());
            } catch (URISyntaxException e) {
                e.printStackTrace();
            }finally{
                if(null!=request)
                    request.abort();
            }
            return null;
    }
   
    /**
     * @param url
     * @param params
     * @return
     */
    public synchronized String post(String url,Map<String,String> params,String ykss){
            String result = "";
            HttpPost request = null;
            try{
                List<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();
                for(Map.Entry<String, String> param : params.entrySet()){
                    pairs.add(new BasicNameValuePair(param.getKey(),param.getValue()));
                }
                request = new HttpPost(url);
                request.setEntity(new UrlEncodedFormEntity(pairs,"UTF-8"));
                setHeader(request,ykss);
                HttpResponse response = httpclient.execute(request);
               
                 //读取cookie并保存文件 
                List<org.apache.http.cookie.Cookie> cookies = httpclient.getCookieStore().getCookies();   
                if (!cookies.isEmpty()) {
                    for (int i = 0; i < cookies.size(); i++) { 
                        System.out.println(cookies.get(i).toString()); 
                        fw.write(cookies.get(i).getName()+"="+cookies.get(i).getValue()+";");  
                        fw.flush();
                    }   
                } 
                readCookieToString();
                int statusCode = response.getStatusLine().getStatusCode();
                if (statusCode == HttpStatus.SC_OK) {
                    System.out.println("----------------------------------------------------------------------");
                    result = EntityUtils.toString(response.getEntity(),"UTF-8");
                    System.out.println("----------------------------------------------------------------------");
                    EntityUtils.consume(response.getEntity());
                    return result;
                }else if(statusCode == HttpStatus.SC_MOVED_TEMPORARILY
                        || statusCode == HttpStatus.SC_MOVED_PERMANENTLY
                        || statusCode == HttpStatus.SC_SEE_OTHER
                        || statusCode == HttpStatus.SC_TEMPORARY_REDIRECT
                        ){
                      Header [] headers = response.getHeaders("Location");
                      if (headers[0] != null) {
                            String newuri = headers[0].getValue();
                        if ((newuri == null) || (newuri.equals("")))
                                newuri = "/";
                        request.abort();
                        HttpGet gg = new HttpGet(newuri);
                        httpclient.execute(gg);
                        gg.abort();
                      }
                }
               
            }catch(IOException e){
                loger.error(e.getMessage());
            } finally{
                if(null!=request)
                    request.abort();
            }
            return null;
    }
    /**
     * @param url
     * @param params
     * @param updateFile
     * @return
     */
    public synchronized String postFile(String url,Map<String,String> params,File updatefile){
            String result = "";
            HttpPost request = null;
            FileBody bin = null;
            try{
                if(null!=updatefile){
                    bin = new FileBody(updatefile); 
                }
                MultipartEntity reqEntity = new MultipartEntity();
                for(Map.Entry<String, String> entry : params.entrySet()){
                    reqEntity.addPart(entry.getKey(), new StringBody(entry.getValue(),Charset.forName("UTF-8")));
                }
                reqEntity.addPart("data", bin);
                request = new HttpPost(url);
                request.setEntity(reqEntity);
                HttpResponse response = httpclient.execute(request);
               
                 //读取cookie并保存文件 
                List<org.apache.http.cookie.Cookie> cookies = httpclient.getCookieStore().getCookies();   
                if (!cookies.isEmpty()) {
                    for (int i = 0; i < cookies.size(); i++) { 
                        System.out.println(cookies.get(i).toString()); 
                        fw.write(cookies.get(i).getName()+"="+cookies.get(i).getValue()+";");  
                        fw.flush();
                    }   
                } 
                readCookieToString();
                int statusCode = response.getStatusLine().getStatusCode();
                if (statusCode == HttpStatus.SC_OK) {
                    System.out.println("----------------------------------------------------------------------");
                    result = EntityUtils.toString(response.getEntity(),"UTF-8");
                    System.out.println("----------------------------------------------------------------------");
                    EntityUtils.consume(response.getEntity());
                    return result;
                }else if(statusCode == HttpStatus.SC_MOVED_TEMPORARILY
                        || statusCode == HttpStatus.SC_MOVED_PERMANENTLY
                        || statusCode == HttpStatus.SC_SEE_OTHER
                        || statusCode == HttpStatus.SC_TEMPORARY_REDIRECT
                        ){
                      Header [] headers = response.getHeaders("Location");
                      if (headers[0] != null) {
                            String newuri = headers[0].getValue();
                        if ((newuri == null) || (newuri.equals("")))
                                newuri = "/";
                        request.abort();
                        HttpGet gg = new HttpGet(newuri);
                        httpclient.execute(gg);
                        gg.abort();
                      }
                }
               
            }catch(IOException e){
                loger.error(e.getMessage());
            } finally{
                if(null!=request)
                    request.abort();
            }
            return null;
    }
   
    /**
     * @param url
     * @param params
     * @param bb 文件分片
     * @return
     */
    public synchronized String postBytes(String url,Map<String,String> params,byte [] bb,String filename){
            String result = "";
            HttpPost request = null;
            ByteArrayBody bin = null;
            try{
                if(null!=bb){
                    bin = new ByteArrayBody(bb,filename); 
                }
                MultipartEntity reqEntity = new MultipartEntity();
                for(Map.Entry<String, String> entry : params.entrySet()){
                    reqEntity.addPart(entry.getKey(), new StringBody(entry.getValue(),Charset.forName("UTF-8")));
                }
                reqEntity.addPart("data", bin);
                request = new HttpPost(url);
                request.setEntity(reqEntity);
                HttpResponse response = httpclient.execute(request);
               
                 //读取cookie并保存文件 
                List<org.apache.http.cookie.Cookie> cookies = httpclient.getCookieStore().getCookies();   
                if (!cookies.isEmpty()) {
                    for (int i = 0; i < cookies.size(); i++) { 
                        System.out.println(cookies.get(i).toString()); 
                        fw.write(cookies.get(i).getName()+"="+cookies.get(i).getValue()+";");  
                        fw.flush();
                    }   
                } 
                readCookieToString();
                int statusCode = response.getStatusLine().getStatusCode();
                if (statusCode == HttpStatus.SC_OK) {
                    System.out.println("----------------------------------------------------------------------");
                    result = EntityUtils.toString(response.getEntity(),"UTF-8");
                    System.out.println("----------------------------------------------------------------------");
                    EntityUtils.consume(response.getEntity());
                    return result;
                }else if(statusCode == HttpStatus.SC_MOVED_TEMPORARILY
                        || statusCode == HttpStatus.SC_MOVED_PERMANENTLY
                        || statusCode == HttpStatus.SC_SEE_OTHER
                        || statusCode == HttpStatus.SC_TEMPORARY_REDIRECT
                        ){
                      Header [] headers = response.getHeaders("Location");
                      if (headers[0] != null) {
                            String newuri = headers[0].getValue();
                        if ((newuri == null) || (newuri.equals("")))
                                newuri = "/";
                        request.abort();
                        HttpGet gg = new HttpGet(newuri);
                        httpclient.execute(gg);
                        gg.abort();
                      }
                }
               
            }catch(IOException e){
                loger.error(e.getMessage());
            } finally{
                if(null!=request)
                    request.abort();
            }
            return null;
    }
   
    private void readCookieToString(){
        try {
            while(fr.read(cookieString)!=-1);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
   
    private static void setHeader(HttpRequestBase request,String ykss){
        request.setHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        request.setHeader("Accept-Encoding","");
        request.setHeader("Accept-Language","zh-CN,zh;q=0.8");
        request.setHeader("Content-Type","application/x-www-form-urlencoded");
        request.setHeader("Origin","https://openapi.youku.com");
        request.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36");
        request.setHeader("Cookie",ykss);
    }
   
    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        fw.close();
        fr.close();
    }
   
    public String cookieString(){
        return String.valueOf(cookieString);
    }
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics