小伟

小伟

 

HTTP POST 数据对接方法

  /// <summary>
  /// 配送商向Accpet发送加密后的数据,并返回Accpet的相应结果
  /// </summary>
  /// <param name="url">Accpet接受地址</param>
  /// <param name="spid">Accpet分配的配送商ID</param>
  /// <param name="data">配送商要发的数据</param>
  /// <param name="key">Accpet提供的Key</param>
  /// <param name="iv">Accpet提供的iv</param>
  /// <returns></returns>
  public static string SpRequest(string url,string spid,string data, string key, string iv)
  {
   string str = DesEncode(data, key, iv);
   string supperid = HttpUtility.UrlEncode(spid, Encoding.UTF8);
   string xmlValue = HttpUtility.UrlEncode(str, Encoding.UTF8);
   WebRequest req = WebRequest.Create(url);
   byte[] bytes = Encoding.ASCII.GetBytes("lcData=" + xmlValue + "&SupplierId=" + supperid);
   //req.Headers.Add("Accept-Encoding:gzip, deflate");
   req.Headers.Add("Accept-Language:zh-cn,en-us");
   req.Headers.Set("Pragma", "no-cache");
   req.Timeout = 10000;
   req.Method = "post";
   req.ContentType = "application/x-www-form-urlencoded";
   req.ContentLength = bytes.Length;
   Stream os = null;
   try
   {
    os = req.GetRequestStream();
    os.Write(bytes, 0, bytes.Length);
    os.Close();
   }
   catch (Exception ex)
   {
    MessageBox.Show(ex.Message);
   }
   return WebResponse((HttpWebRequest)req, System.Text.Encoding.GetEncoding("utf-8"),key,iv);
  }

  /// <summary>
  /// 获取Accpet返回XML
  /// </summary>
  /// <param name="request">向Accpet发起的HttpWebRequest</param>
  /// <param name="encoding">向Accpet发起的HttpWebRequest编码格式</param>
  /// <param name="key">Accpet提供key</param>
  /// <param name="iv">Accpet提供iv</param>
  /// <returns>XML串</returns>
  public static string WebResponse(HttpWebRequest request, Encoding encoding, string key, string iv)
  {
   HttpWebResponse response = (HttpWebResponse)request.GetResponse();
   StreamReader reader = new StreamReader(response.GetResponseStream());
   string strResponse = reader.ReadToEnd();
   reader.Close();
   response.Close();
   if (string.IsNullOrEmpty(strResponse))
   {
    return "";
   }
   strResponse = HttpUtility.UrlDecode(strResponse, encoding);
   strResponse = DesDecode(strResponse, key, iv);
   return strResponse;

  }
  /// <summary>
  /// DES加密
  /// </summary>
  /// <param name="data">要加密的数据</param>
  /// <param name="key">Accpet提供key</param>
  /// <param name="iv">Accpet提供iv</param>
  /// <returns>加密后的串</returns>
  public static string DesEncode(string data, string key, string iv)
  {
   byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(key);
   byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(iv);
   DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
   int i = cryptoProvider.KeySize;
   MemoryStream ms = new MemoryStream();
   CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);

   StreamWriter sw = new StreamWriter(cst);
   sw.Write(data);
   sw.Flush();
   cst.FlushFinalBlock();
   sw.Flush();
   return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);

  }
  /// <summary>
  /// DES解密
  /// </summary>
  /// <param name="data">要解密的数据</param>
  /// <param name="key">Accpet提供key</param>
  /// <param name="iv">Accpet提供iv</param>
  /// <returns>解密后的串</returns>
  public static string DesDecode(string data, string key, string iv)
  {
   byte[] byKey = ASCIIEncoding.ASCII.GetBytes(key);
   byte[] byIV = ASCIIEncoding.ASCII.GetBytes(iv);
   byte[] byEnc;
   try
   {
    byEnc = Convert.FromBase64String(data);
   }
   catch
   {
    return null;
   }
   DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
   MemoryStream ms = new MemoryStream(byEnc);
   CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);
   StreamReader sr = new StreamReader(cst);
   return sr.ReadToEnd();
  }

posted on 2011-11-18 10:30  旋风  阅读(918)  评论(0)    收藏  举报

导航