模拟远程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         }
原文地址:https://www.cnblogs.com/ywblog/p/6689031.html