建立请求,以模拟远程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, , 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 - , );
  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", "");//1:簡訊 2:電子郵件
  21. sParaTemp.Add("LaunchID", "");//任務編號
  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. }

模拟远程HTTP的POST请求的更多相关文章

  1. nodejs向远程服务器发送post请求----融云Web SDK/客户端获取token

    最近要用到一个叫融云的及时通讯的SDK,在获取token这个步骤的时候有点卡顿,以防以后碰到类似的问题,再此记录一下. 客户端通过融云 SDK 每次连接服务器时,都需要向服务器提供 Token,以便验 ...

  2. 使用PHP Socket 编程模拟Http post和get请求

    这里给大家分享一段使用PHP Socket 编程模拟Http post和get请求的代码,非常的实用,结尾部分我们再讨论下php模拟http请求的几种方法. <?php /** * 使用PHP ...

  3. php模拟发送GET和POST请求

    php分别模拟发送GET和POST请求,非常实用的额,也可作PHP CURL入门级的理解教材的,示例代码如下: <?php /* ** php分别模拟发送GET与POST请求 ** */ fun ...

  4. LoadRunner模拟REST接口的json请求

    LoadRunner模拟REST接口的json请求 现在很多手机应用的性能测试,REST接口调用通过json格式,在用loadrunner模拟这些json请求时,需要开发提供 1.供接口地址 2.提交 ...

  5. java中如何模拟真正的同时并发请求?

    有时需要测试一下某个功能的并发性能,又不要想借助于其他工具,索性就自己的开发语言,来一个并发请求就最方便了. java中模拟并发请求,自然是很方便的,只要多开几个线程,发起请求就好了.但是,这种请求, ...

  6. java模拟http的Get/Post请求,并设置ip与port代理

    本文涉及3个基本点: 1.因为很多公司的内网都设有代理,浏览器通过ip与port上网,而java代码模拟http get方式同样需要外网代理: 2.Java实现http的Get/Post请求代码: 3 ...

  7. 使用HttpRequester模拟发送及接收Json请求

    1.开发人员在火狐浏览器里经常使用的工具有Firebug,httprequester,restclient......火狐浏览器有一些强大的插件供开发人员使用!需要的可以在附加组件中扩展. 2.htt ...

  8. Winform模拟post请求和get请求登录网站

    引言 最近有朋友问如何用winform模拟post请求,然后登录网站,稍微想了一下,大致就是对http报文的相关信息的封装,然后请求网站登录地址的样子.发现自己的博客中对这部分只是也没总结,就借着这股 ...

  9. 如何用ASP.NET实现bosh模拟http双向长连接请求

    在做研究之前先简单说一下之前公司的通讯模块.最早的时候公司开发的web管理系统是需要配合c++桌面客户端进行一些系统底层操作,并非普通的b/s架构,或者c/s架构,因为需求是可以通过web管理系统向客 ...

随机推荐

  1. jvectormap地图开发和制作任意国家地图

    jvectormap官网上提供了世界地图和很多国家的地图,但不是所有国家的地图都有,比如沙特阿拉伯的国家地图就没有,怎么办呢? 在http://www.amcharts.com/svg-maps/上下 ...

  2. Linux常用命令之-grep

    简介 grep全称Global Regular Expression Print是一种强大的文本搜索工具,它能使用给定的正则表达式按行搜索文本输出,文件,目录等,统计并输出匹配的信息,grep在文本查 ...

  3. 关于eclipse open call hierarchy功能的一个细节

    这个功能对应的快捷键是ctrl alt H,大家应该都很熟悉了.默认是查找这个方法的被调用堆栈.90%的人应该也是习惯这个默认的功能的,也基本无视它的另一个功能. 昨天重启eclipe之后,我的ecl ...

  4. 可视化库-Matplotlib-Pandas与sklearn结合(第四天)

    1. 计算每一种的比例的百分比 import pandas as pd from matplotlib.ticker import FuncFormatter np.random.seed(0) df ...

  5. Spring Boot实践——多线程

    多线程 Spring通过任务执行器(TaskExecutor)来实现多线程和并发编程.使用ThreadPoolTaskExecutor可实现一个基于线程池的TaskExecutor.而实际开发中任务一 ...

  6. vs启动项目提示Web 服务器被配置为不列出此目录的内容。

    解决方法 确认网站或应用程序配置文件中的 configuration/system.webServer/directoryBrowse@enabled 属性已设置为 true. 配置一下web.con ...

  7. LevelDb日知录之五:MemTable详解

    [LevelDb日知录之五:MemTable详解] LevelDb日知录前述小节大致讲述了磁盘文件相关的重要静态结构,本小节讲述内存中的数据结构Memtable,Memtable在整个体系中的重要地位 ...

  8. String对象不可改变的特性及内存机制

    JAVA中字符串类型String是不允许改变其内容的,下列语句是如何运行的:String s=new String("ABCD");s=s+"123": 最佳回 ...

  9. bootstraptable为行中的按钮添加事件

  10. hive分隔符总结

    ascii对应的表Char Dec Oct Hex | Char Dec Oct Hex | Char Dec Oct Hex | Char Dec Oct Hex ----------------- ...