http请求模拟

123 篇文章 0 订阅
26 篇文章 0 订阅
一、 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值