http请求模拟

来源:互联网 发布:oppor9root软件 编辑:程序博客网 时间:2024/06/13 20:38
一、HttpClient
import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.ArrayList;import java.util.List;import org.apache.commons.httpclient.Header;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpException;import org.apache.commons.httpclient.HttpStatus;import org.apache.commons.httpclient.methods.PostMethod;import org.apache.http.client.utils.URIUtils;import org.apache.http.client.utils.URLEncodedUtils;import org.apache.http.message.BasicNameValuePair;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;public class TestHttp {  private static String ENCODED_TYPE = "GBK"; private static String scheme = "http"; //本机// private static String host = "192.168.7.19";// private static int port = 8088;// private static String path = "/bocep2c/api/storeorderapi.do";  //测试服务器 private static String host = "111.160.xxx.xxx"; private static int port = 24080; private static String path = "/api/storeorderapi.do";  private static String methodValue = "getOrderDetail"; /**  * @param args  */ public static void main(String[] args) {  HttpClient httpClient = new HttpClient();  String response = httpRequest("null", httpClient);  printJson(response); }  private static String httpRequest(String data, HttpClient httpClient) {  // System.out.println("the order is:"+data);  //httpURL = Utf8URLencode(httpURL);  List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();    params.add(new BasicNameValuePair("method", methodValue));    params.add(new BasicNameValuePair("charset", ENCODED_TYPE));  params.add(new BasicNameValuePair("productId", "c9gb2147"));  params.add(new BasicNameValuePair("productIds", "usuu2433,fhks2432"));  params.add(new BasicNameValuePair("userId", "1111110145"));  params.add(new BasicNameValuePair("token", md5("1111110145")));  //params.add(new BasicNameValuePair("name", "honghailiang666"));  params.add(new BasicNameValuePair("promotionType", "K"));  params.add(new BasicNameValuePair("pageIndex", "1"));   params.add(new BasicNameValuePair("pageSize", "10"));   params.add(new BasicNameValuePair("type", "0"));  params.add(new BasicNameValuePair("bestUserId", "100005368"));  params.add(new BasicNameValuePair("password", md5("1111110145"+"bocetest123")));  params.add(new BasicNameValuePair("idCard", "100005369111111"));  params.add(new BasicNameValuePair("province", "100120000000000"));  params.add(new BasicNameValuePair("orderId", "15121000533500"));  params.add(new BasicNameValuePair("storeId", "1111110145"));  params.add(new BasicNameValuePair("storeIds", "1111110829"));  params.add(new BasicNameValuePair("giftCardId", "402886594eb4b907014eb87ec0a10023"));  params.add(new BasicNameValuePair("storeViewId", "f77ea0dc49ebb8a20149f95c8921015e"));  params.add(new BasicNameValuePair("viewCount", "8"));  params.add(new BasicNameValuePair("pageType", "1"));  params.add(new BasicNameValuePair("searchKey", ""));  params.add(new BasicNameValuePair("reason", "触屏版测试"));  params.add(new BasicNameValuePair("logisticsId", "f77ea0dc49314a44014931d68504005e"));  params.add(new BasicNameValuePair("expressNo", "15112000513900"));  params.add(new BasicNameValuePair("fhNote", "触屏版测试"));  params.add(new BasicNameValuePair("rewardStatus", "0"));  params.add(new BasicNameValuePair("categoryId", "tkox1665"));    params.add(new BasicNameValuePair("friendId", "1211111112"));  params.add(new BasicNameValuePair("note", "触屏版"));  params.add(new BasicNameValuePair("loginType", "3"));  params.add(new BasicNameValuePair("note", "触屏版"));    //加购物车的商品信息  JSONObject jsonObject = new JSONObject();  jsonObject.put("productId", "24qm2538");  jsonObject.put("quantity", 500);  jsonObject.put("listPrice", 20);  jsonObject.put("status", false);  jsonObject.put("unitPrice", 10);  params.add(new BasicNameValuePair("product", jsonObject.toString()));    //删除购物车商品  JSONObject jsonObject2 = new JSONObject();  jsonObject2.put("productId", "sxkt2277");  jsonObject2.put("id", "1449626295719");  jsonObject2.put("number", 1);      JSONArray ja = new JSONArray();  ja.add(jsonObject2);  params.add(new BasicNameValuePair("products", ja.toString()));    //编码,会对(非ascii码)非法字符进行%号编码  String param = URLEncodedUtils.format(params, ENCODED_TYPE);     //String param = "userId=洪海亮";     URI uri = null;  try {   uri = URIUtils.createURI(scheme, host, port, path, param, null);  } catch (URISyntaxException e1) {   // TODO Auto-generated catch block   e1.printStackTrace();  }  //  Map<String, String> paramMap = new HashMap<String, String>();//  paramMap.put("method", methodValue);//  paramMap.put("charset", ENCODED_TYPE);//  paramMap.put("productId", "c9gb2147");//  //  String encodeZ = null;//  try {//   encodeZ = URLEncoder.encode("洪海亮", "GBK");//  } catch (UnsupportedEncodingException e2) {//   // TODO Auto-generated catch block//   e2.printStackTrace();//  }//  paramMap.put("userId", encodeZ);//  paramMap.put("pageIndex", "1"); //  paramMap.put("pageSize", "10");//  Set<String> keySet = paramMap.keySet();//  StringBuffer requestParams = new StringBuffer();//  for (String key : keySet) {//   String encodeParam = key + "=" + paramMap.get(key);//   requestParams.append(encodeParam + "&");//  }//  //  String paramS = requestParams.toString();//  // new URL  会对其中的非法字符进行编码%号编码(但是中文要先进行GBK或者UTF-8编码),%  %25//  //  /**//   *Url编码默认使用的字符集是US-ASCII//   *对于非ASCII字符,需要使用ASCII字符集的超集进行编码得到相应的字节,然后对每个字节执行百分号编码。 //   * //   * //   *///  //  URI uri = null;//  try {//   uri = new URI(scheme, null, host, port, path, paramS, null);//  } catch (URISyntaxException e1) {//   // TODO Auto-generated catch block//   e1.printStackTrace();//   //  }        String respones = null;    if(uri != null && uri.toString()!= null && uri.toString()!= "") {   PostMethod postMethod = new PostMethod(uri.toString());   postMethod.addRequestHeader("Content-Type", "text/html;charset=GBK");   postMethod.setRequestBody(data);   // 执行postMethod   try {    int statusCode = httpClient.executeMethod(postMethod);    // HttpClient对于要求接受后继服务的请求,象POST和PUT等不能自动处理转发    // 301或者302    if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY      || statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {     // 从头中取出转向的地址     Header locationHeader = postMethod       .getResponseHeader("location");     String location = null;     if (locationHeader != null) {      location = locationHeader.getValue();      System.out.println("The page was redirected to:" + location);     } else {      System.err.println("Location field value is null.");     }    }    String encode = postMethod.getResponseCharSet();    respones = postMethod.getResponseBodyAsString();    // System.out.println("the resule is:" + respones);   } catch (HttpException e) {    e.printStackTrace();   } catch (IOException e) {    // 发生网络异常    e.printStackTrace();   } catch (Exception e) {    e.printStackTrace();   }  }       return respones; }


 /**  * 对字符串进行MD5加密  *   * @param text  *            明文  *   * @return 密文  */ public static String md5(String text) {  MessageDigest msgDigest = null;  try {   msgDigest = MessageDigest.getInstance("MD5");  } catch (NoSuchAlgorithmException e) {   throw new IllegalStateException(     "System doesn't support MD5 algorithm.");  }  msgDigest.update(text.getBytes());  byte[] bytes = msgDigest.digest();  byte tb;  char low;  char high;  char tmpChar;  String md5Str = new String();  for (int i = 0; i < bytes.length; i++) {   tb = bytes[i];   tmpChar = (char) ((tb >>> 4) & 0x000f);   if (tmpChar >= 10) {    high = (char) (('a' + tmpChar) - 10);   } else {    high = (char) ('0' + tmpChar);   }   md5Str += high;   tmpChar = (char) (tb & 0x000f);   if (tmpChar >= 10) {    low = (char) (('a' + tmpChar) - 10);   } else {    low = (char) ('0' + tmpChar);   }   md5Str += low;  }  return md5Str; }  public static void printJson(String jsonStr){        System.out.println(formatJson(jsonStr));    }        /**     * 格式化     * @param jsonStr     * @return     */    public static String formatJson(String jsonStr) {        if (null == jsonStr || "".equals(jsonStr)) return "";        StringBuilder sb = new StringBuilder();        char last = '\0';        char current = '\0';        int indent = 0;        for (int i = 0; i < jsonStr.length(); i++) {            last = current;            current = jsonStr.charAt(i);            switch (current) {                case '{':                case '[':                    sb.append(current);                    sb.append('\n');                    indent++;                    addIndentBlank(sb, indent);                    break;                case '}':                case ']':                    sb.append('\n');                    indent--;                    addIndentBlank(sb, indent);                    sb.append(current);                    break;                case ',':                    sb.append(current);                    if (last != '\\') {                        sb.append('\n');                        addIndentBlank(sb, indent);                    }                    break;                default:                    sb.append(current);            }        }         return sb.toString();    }     /**     * 添加space     * @param sb     * @param indent     */    private static void addIndentBlank(StringBuilder sb, int indent) {        for (int i = 0; i < indent; i++) {            sb.append('\t');        }    }}


二、HttpAsyncClient

@Override public Map<String, Object> updateStoreProduct(String product) {  List<Param> param = Arrays.asList(new Param("product", product));  return this.post("storeproductapi.do", "updateStoreProduct", param); }Map<String, Object> post(String url, String method, List<Param> param) {  List<Param> params = param;  if (params == null) {   params = new ArrayList<>();  } else {   params = new ArrayList<>(param);  }  params.add(new Param("method", method));  params.add(new Param("charset", "gbk"));  //设置请求的来源,W:触屏版,A:android App,I:ios App  params.add(new Param("source", "W"));  logger.debug("param:" + JsonUtil.writeValue(params));  try {   Map<String, Object> ret = HttpClientUtil.post(this.base + "api/"     + url, params, "gbk");   logger.debug("ret:" + JsonUtil.writeValue(ret));   return ret;  } catch (Exception e) {   e.printStackTrace();  }  return null; }/**  * @param url  * @param params  * @param charset  * @return  * @throws IOException   * @throws ExecutionException Http  * @throws InterruptedException   */ public static Map<String,Object> post(String url,List<Param> params,String charset) throws IOException, InterruptedException, ExecutionException{  CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault();  try{   httpclient.start();   HttpPost post=new HttpPost(url);   List<NameValuePair> form=new ArrayList<>();   for(Param p:params){    form.add(new BasicNameValuePair(p.getName(), p.getValue()));   }   post.setEntity(new UrlEncodedFormEntity(form, charset));   HttpResponse resp=httpclient.execute(post, null).get();   return JsonUtil.readValue(IOUtils.toString(resp.getEntity().getContent(), charset),Map.class);  }finally{   httpclient.close();  }   }

三、UrlConnection


四、volley

五、okhttp、retrofit

后两种是android通用通信框架


0 0