zoukankan      html  css  js  c++  java
  • 模拟远程HTTP的POST请求

    建立请求,以模拟远程HTTP的POST请求方式构造并获取处理结果

     1         /// <summary>
     2         /// 建立请求,以模拟远程HTTP的POST请求方式构造并获取处理结果
     3         /// </summary>
     4         /// <param name="sParaTemp">请求参数数组</param>
     5         /// <returns>处理结果</returns>
     6         public string BuildRequest(Dictionary<string, string> sParaTemp,string url,string input_chartset)
     7         {
     8             Encoding code = Encoding.GetEncoding(input_chartset);
     9 
    10             //待请求参数数组字符串
    11             string strRequestData = BuildRequestParaToString(sParaTemp, code);
    12 
    13             //把数组转换成流中所需字节数组类型
    14             byte[] bytesRequestData = code.GetBytes(strRequestData);
    15 
    16             //构造请求地址
    17             string strUrl = url;
    18 
    19             //请求远程HTTP
    20             string strResult = "";
    21             try
    22             {
    23                 //设置HttpWebRequest基本信息
    24                 HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(strUrl);
    25                 myReq.Method = "post";
    26                 myReq.ContentType = "application/x-www-form-urlencoded";
    27 
    28                 //填充POST数据
    29                 myReq.ContentLength = bytesRequestData.Length;
    30                 Stream requestStream = myReq.GetRequestStream();
    31                 requestStream.Write(bytesRequestData, 0, bytesRequestData.Length);
    32                 requestStream.Close();
    33 
    34                 //发送POST数据请求服务器
    35                 HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();
    36                 Stream myStream = HttpWResp.GetResponseStream();
    37 
    38                 //获取服务器返回信息
    39                 StreamReader reader = new StreamReader(myStream, code);
    40                 StringBuilder responseData = new StringBuilder();
    41                 String line;
    42                 while ((line = reader.ReadLine()) != null)
    43                 {
    44                     responseData.Append(line);
    45                 }
    46 
    47                 //释放
    48                 myStream.Close();
    49 
    50                 strResult = responseData.ToString();
    51             }
    52             catch (Exception exp)
    53             {
    54                 strResult = "报错:" + exp.Message;
    55             }
    56 
    57             return strResult;
    58         }
    59 
    60         /// <summary>
    61         /// 生成要请求的参数数组
    62         /// </summary>
    63         /// <param name="sParaTemp">请求前的参数数组</param>
    64         /// <param name="code">字符编码</param>
    65         /// <returns>要请求的参数数组字符串</returns>
    66         private string BuildRequestParaToString(Dictionary<string, string> sParaTemp, Encoding code)
    67         {
    68             //把参数组中所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对参数值做urlencode
    69             string strRequestData = CreateLinkStringUrlencode(sParaTemp, code);
    70             return strRequestData;
    71         }
    72 
    73         /// <summary>
    74         /// 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对参数值做urlencode
    75         /// </summary>
    76         /// <param name="sArray">需要拼接的数组</param>
    77         /// <param name="code">字符编码</param>
    78         /// <returns>拼接完成以后的字符串</returns>
    79         private string CreateLinkStringUrlencode(Dictionary<string, string> dicArray, Encoding code)
    80         {
    81             StringBuilder prestr = new StringBuilder();
    82             foreach (KeyValuePair<string, string> temp in dicArray)
    83             {
    84                 prestr.Append(temp.Key + "=" + HttpUtility.UrlEncode(temp.Value, code) + "&");
    85             }
    86 
    87             //去掉最後一個&字符
    88             int nLen = prestr.Length;
    89             prestr.Remove(nLen - 1, 1);
    90 
    91             return prestr.ToString();
    92         }

    调用

     1         /// <summary>
     2         /// 查询电子邮件状态
     3         /// </summary>
     4         /// <returns></returns>
     5         [HttpPost]
     6         public ActionResult QueryEmailStatus()
     7         {
     8             string responseText = string.Empty;
     9             try
    10             {
    11                 #region 调用查询电子邮件状态接口
    12 
    13                 string url = "http://localhost/WebAPI/status.aspx";
    14                 string input_chartset="utf-8";
    15                 //构造参数
    16                 Dictionary<string, string> sParaTemp = new Dictionary<string, string>();
    17                 sParaTemp.Add("ManagerLoginName", "XXXXXXX");//API帳號
    18                 sParaTemp.Add("ManagerPassword", "XXXXXXX");//API密碼
    19 
    20                 sParaTemp.Add("JobType", "2");//1:簡訊 2:電子郵件
    21                 sParaTemp.Add("LaunchID", "100");//任務編號
    22                 sParaTemp.Add("EmailAddress", "394401333@qq.com");//查詢的對象(收件者信箱)     
    23 
    24                 //提交请求,获得返回结果
    25                 responseText = BuildRequest(sParaTemp, url, input_chartset);
    26 
    27                 #endregion
    28             }
    29             catch (Exception ex)
    30             {
    31                 throw ex;
    32                 //Log.Error(this.GetType().ToString(), "Exception: " + ex.Message);
    33             }
    34             return RedirectToAction("Index", "Demo");
    35         }
  • 相关阅读:
    VS2010安装SP1后无法安装VS2010 SDK
    c#异常机制
    精简2003,安装后控制面板无效,点击控制面板就闪一下,返回桌面
    转载 Microsoft .NET Pet Shop 4 架构与技术分析
    JavaScript实用的一些技巧
    asp.net开发常用技巧收集
    Ajax+PHP+jQuery图片截图上传
    如何利用WINPE制作恢复光盘/恢复分区
    C/C++跨平台计时,精确到毫秒级别
    SetLocalInfo修改系统时间,立即生效
  • 原文地址:https://www.cnblogs.com/ywblog/p/6689031.html
Copyright © 2011-2022 走看看