HttpClient4UrlFetch.java :  » API » taobaoonandroid » com » taobao » api » Android Open Source

Android Open Source » API » taobaoonandroid 
taobaoonandroid » com » taobao » api » HttpClient4UrlFetch.java
/**
 * 
 */
package com.taobao.api;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.params.ConnManagerParams;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import com.taobao.api.model.TaobaoResponse;


/**
 * ...
 * 
 * <a
 * href="http://hc.apache.org/httpcomponents-client/">commons-httpclient-4.x</a>
 * UrlFetch
 * 
 * httpclient4httpclient3,httpclient3 HttpClient3UrlFetch
 * 
 * @author <a href="mailto:zixue@taobao.com">zixue</a>
 */
public class HttpClient4UrlFetch extends AbstractUrlFetch {
  public static final String SIP_STATUS_OK = "9999";

  private HttpClient httpClient;

  private HttpParams httpParams;

  private boolean keepAlive = false;

  public HttpClient4UrlFetch() {
    initHttpClient();
  }

  private void initHttpClient() {
    SchemeRegistry schemeRegistry = new SchemeRegistry();
        schemeRegistry.register(
                new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
    httpParams = new BasicHttpParams();
    HttpProtocolParams.setVersion(httpParams, HttpVersion.HTTP_1_1);
    this.setMaxTotalConnections(DEFAULT_MAX_TOTAL_CONNECTIONS);
    this.setReadTimeout(DEFAULT_READ_TIMEOUT);
    ClientConnectionManager cm = new ThreadSafeClientConnManager(
        httpParams, schemeRegistry);
    httpClient = new DefaultHttpClient(cm, httpParams);
  }

  public TaobaoResponse fetch(URL url, Map<String, CharSequence> payload)
      throws TaobaoApiException {
    return this.fetchWithFile(url, payload, null);
  }

  public TaobaoResponse fetchWithFile(URL url,
      Map<String, CharSequence> payload, File file)
      throws TaobaoApiException {
    TaobaoResponse rsp = null;
    HttpPost postMethod = null;
    try {
      postMethod = new HttpPost(url.toString());
      rsp = _fetch(postMethod, payload, file);
    } catch (Exception e) {
      throw new TaobaoApiException(e);
    } finally {
    }
    return rsp;
  }

  protected TaobaoResponse _fetch(HttpPost post,
      Map<String, CharSequence> payload, File file) throws IOException {
    Set<Entry<String, CharSequence>> entries = payload.entrySet();
    List<NameValuePair> nvps = new ArrayList<NameValuePair>();
    for (Entry<String, CharSequence> entry : entries) {
      NameValuePair nvp = new BasicNameValuePair(entry.getKey(),
          (String) entry.getValue());
      nvps.add(nvp);
    }
    if (file != null) {
      // TODO
    } else {
      post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
    }
    if (this.keepAlive) {
      post.setHeader("Connection", "Keep-Alive");
    }
    Header responseHeader = null;
    HttpResponse response = httpClient.execute(post);
    responseHeader = post.getLastHeader("sip_status");
    String body = EntityUtils.toString(response.getEntity());
    TaobaoResponse urlRsp = new TaobaoResponse();
    if (responseHeader != null) {
      String status = responseHeader.getValue();
      if (!SIP_STATUS_OK.equals(status)) {
        urlRsp.setErrorCode(status);
        urlRsp.setMsg(post.getLastHeader("sip_error_message")
            .getValue());
        if (status.equals("1004")) {
          urlRsp.setRedirectUrl(post
              .getLastHeader("sip_isp_loginurl").getValue());
        }
      }
    }
    urlRsp.setBody(body);
    return urlRsp;
  }

  /*
   * (non-Javadoc)
   * 
   * @see com.taobao.api.UrlFetch#setKeepAlive(boolean)
   */
  public void setKeepAlive(boolean keepAlive) {
    this.keepAlive = keepAlive;
  }

  /*
   * (non-Javadoc)
   * 
   * @see com.taobao.api.UrlFetch#setStaleCheckingEnabled(boolean)
   */
  public void setStaleCheckingEnabled(boolean value) {
    throw new UnsupportedOperationException();
  }

  /*
   * (non-Javadoc)
   * 
   * @see com.taobao.api.UrlFetch#setDefaultMaxConnectionsPerHost(int)
   */
  public void setMaxConnectionsPerHost(int maxHostConnections) {
    throw new UnsupportedOperationException();
  }

  /*
   * (non-Javadoc)
   * 
   * @see com.taobao.api.UrlFetch#setMaxTotalConnections(int)
   */
  public void setMaxTotalConnections(int maxTotalConnections) {
    ConnManagerParams.setMaxTotalConnections(this.httpParams,
        maxTotalConnections);
  }

  public void setConnectTimeout(int milliSecond) {
    throw new UnsupportedOperationException();
  }

  public void setReadTimeout(int milliSecond) {
    ConnManagerParams.setTimeout(this.httpParams, DEFAULT_READ_TIMEOUT);
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.