作者:zyl910。

  这几天在调试一个使用Http POST协议的接口。在网上找了几个Http测试工具,但感觉不太好用。于是自己用C#写了一个简单的测试工具。

一、使用介绍

  默认是“POST”模式。在最上面的文本框中输入Url地址,然后在“Post Data”文本框中输入Post参数,再点击“Go”按钮发送请求。
  如果想使用“GET”模式。便点击左上角的组合框,选择“GET”模式,再点击“Go”按钮发送请求。
  当发现回应内容乱码时。点击“Response Encoding”组合框,选择合适的编码。再点击“Go”按钮重新发送请求。

二、全部代码

  窗口的代码(FrmTestHttpPost.cs)——

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Net.Cache;namespace TestHttpPost
{public partial class FrmTestHttpPost : Form{private EncodingInfo[] _Encodings = null;    // 编码集合.private Encoding _ResEncoding = null;    // 回应的编码.public FrmTestHttpPost(){InitializeComponent();}/// <summary>/// 根据BodyName创建Encoding对象。/// </summary>/// <param name="bodyname">与邮件代理正文标记一起使用的当前编码的名称。</param>/// <returns>返回Encoding对象。若没有匹配的BodyName,便返回null。</returns>public static Encoding Encoding_FromBodyName(string bodyname){if (string.IsNullOrEmpty(bodyname)) return null;try{foreach (EncodingInfo ei in Encoding.GetEncodings()){Encoding e = ei.GetEncoding();if (0 == string.Compare(bodyname, e.BodyName, true)){return e;}}}catch{}return null;}/// <summary>/// 输出日志文本./// </summary>/// <param name="s">日志文本</param>private void OutLog(string s){txtLog.AppendText(s + Environment.NewLine);txtLog.ScrollToCaret();}private void OutLog(string format, params object[] args){OutLog(string.Format(format, args));}private void FrmTestHttpPost_Load(object sender, EventArgs e){// Http方法cboMode.SelectedIndex = 1;    // POST// 回应的编码
            cboResEncoding.Items.Clear();_Encodings = Encoding.GetEncodings();cboResEncoding.DataSource = _Encodings;cboResEncoding.DisplayMember = "DisplayName";_ResEncoding = Encoding.UTF8;cboResEncoding.SelectedIndex = cboResEncoding.FindStringExact(_ResEncoding.EncodingName);}private void btnGo_Click(object sender, EventArgs e){Encoding myEncoding = Encoding.UTF8;string sMode = (string)cboMode.SelectedItem;string sUrl = txtUrl.Text;string sPostData = txtPostData.Text;string sContentType = "application/x-www-form-urlencoded";HttpWebRequest req;// Log Lengthif (txtLog.Lines.Length > 3000) txtLog.Clear();// == main ==OutLog(string.Format("{2}: {0} {1}", sMode, sUrl, DateTime.Now.ToString("g")));try{// initreq = HttpWebRequest.Create(sUrl) as HttpWebRequest;req.Method = sMode;req.Accept = "*/*";req.KeepAlive = false;req.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);if (0 == string.Compare("POST", sMode)){byte[] bufPost = myEncoding.GetBytes(sPostData);req.ContentType = sContentType;req.ContentLength = bufPost.Length;Stream newStream = req.GetRequestStream();newStream.Write(bufPost, 0, bufPost.Length);newStream.Close();}// ResponseHttpWebResponse res = req.GetResponse() as HttpWebResponse;try{OutLog("Response.ContentLength:\t{0}", res.ContentLength);OutLog("Response.ContentType:\t{0}", res.ContentType);OutLog("Response.CharacterSet:\t{0}", res.CharacterSet);OutLog("Response.ContentEncoding:\t{0}", res.ContentEncoding);OutLog("Response.IsFromCache:\t{0}", res.IsFromCache);OutLog("Response.IsMutuallyAuthenticated:\t{0}", res.IsMutuallyAuthenticated);OutLog("Response.LastModified:\t{0}", res.LastModified);OutLog("Response.Method:\t{0}", res.Method);OutLog("Response.ProtocolVersion:\t{0}", res.ProtocolVersion);OutLog("Response.ResponseUri:\t{0}", res.ResponseUri);OutLog("Response.Server:\t{0}", res.Server);OutLog("Response.StatusCode:\t{0}\t# {1}", res.StatusCode, (int)res.StatusCode);OutLog("Response.StatusDescription:\t{0}", res.StatusDescription);// headerOutLog(".\t#Header:");    // 头.for (int i = 0; i < res.Headers.Count; ++i){OutLog("[{2}] {0}:\t{1}", res.Headers.Keys[i], res.Headers[i], i);}// 找到合适的编码Encoding encoding = null;//encoding = Encoding_FromBodyName(res.CharacterSet);    // 后来发现主体部分的字符集与Response.CharacterSet不同.//if (null == encoding) encoding = myEncoding;encoding = _ResEncoding;System.Diagnostics.Debug.WriteLine(encoding);// bodyOutLog(".\t#Body:");    // 主体.using (Stream resStream = res.GetResponseStream()){using (StreamReader resStreamReader = new StreamReader(resStream, encoding)){OutLog(resStreamReader.ReadToEnd());}}OutLog(".\t#OK.");    // 成功.
                }finally{res.Close();}}catch (Exception ex){OutLog(ex.ToString());}OutLog(string.Empty);}private void cboResEncoding_SelectedIndexChanged(object sender, EventArgs e){EncodingInfo ei = cboResEncoding.SelectedItem as EncodingInfo;if (null == ei) return;_ResEncoding = ei.GetEncoding();}}
}

源码下载—— 
http://files.cnblogs.com/zyl910/TestHttpPost.rar

[C#] TestHttpPost:测试Http的POST方法的小工具相关推荐

  1. 一个目前很火的文字转语音方法,小工具为你的视频配音

    随着短视频的爆火文字转语音也火热起来,在大家制作短视频的时候我想应该是常常遇到需要配音的场景,其实文字转语音的应用还是非常广泛的,短视频一些广播中都有文字转换成语音的功能,短视频说起来其实就是一些短视 ...

  2. mailbox 编程_Ring的Mailbox Sensor是我测试过的书呆子智能家居小工具之一

    我小时候最喜欢的电影之一是<宝贝,我缩小孩子们>.在其中,主要人物韦恩·萨林斯基(Wayne Szalinski)是一位宅急如焚的科学家,小工具小发明家,他在阁楼上产生了收缩射线,意外地缩 ...

  3. 测试工作中常用在线小工具-初级篇

    背景 测试过程中经常需要用到一些工具来校验数据的正确性,并且可以帮助测试人员更好的定位问题,所以我总结了我这个初级测试小白日常测试使用的小工具~ 1.在线json转换: http://www.bejs ...

  4. 测试分析设计工程方法

    产品的测试分析设计包括:测试需求分析.测试方案设计.测试用例实现,这三个阶段.测试分析设计工程方法是针对于前两个阶段的,现实中往往需要灵活运用多个工程方法,重点需要掌握各个工程方法的思路,在实践中不断 ...

  5. python性能测试方法_Python实现测试磁盘性能的方法

    本文实例讲述了Python实现测试磁盘性能的方法.分享给大家供大家参考.具体如下: 该代码做了如下工作: create 300000 files (512B to 1536B) with data f ...

  6. selenium自动化测试_维持Selenium测试自动化的完美方法

    selenium自动化测试 毫无疑问, 自动浏览器测试已改变了软件开发的工作方式. 如果不是Selenium,我们将无法像我们一样使用各种各样的无错误的Web应用程序. 但是有时,甚至IT部门也误解了 ...

  7. 维持硒测试自动化的完美方法

    毫无疑问, 自动浏览器测试已经改变了软件开发的工作方式. 如果不是Selenium,我们将无法像我们一样使用各种各样的无错误Web应用程序. 但是有时,甚至IT部门也误解了自动化一词. 大多数人认为计 ...

  8. python可以开发驱动吗_Python机器学习实践:测试驱动的开发方法

    Python机器学习实践:测试驱动的开发方法 作者:(美)马修·柯克(Matthew Kirk) 著 出版日期:2017年10月 文件大小:30.91M 支持设备: ¥40.00在线试读 适用客户端: ...

  9. android 回归测试,android测试:monkey使用方法

    android测试:monkey使用方法 Android Sdk给我们提供了Monkey和Monkeyrunner这两个自动化测试工具. 一.什么是Monkey Monkey是一个命令行工具,可以运行 ...

  10. win7系统稳定测试软件,win7系统电脑测试cpu性能的方法(图文)

    一般情况,购买电脑都比较注重cpu性能,cpu是一台计算机的运算核心和控制核心,所以是非常重要的.很多用户遇到win7系统电脑开机CPU就达到80多度,并且会自动关机或重启,非常麻烦,怎么回事呢?这种 ...

最新文章

  1. 区块链BaaS云服务(33)印度国家支付 Vajra Platform
  2. CentOS 6.x 快速安装L2TP ***
  3. 删除Windows 7自动创建的隐藏分区
  4. 勒索团伙正奔向 SonicWall 设备
  5. 流媒体技术学习笔记之(十五)FFmpeg编码遇到的错误、警告、Debug记录
  6. 数论 中国剩余定理(孙子定理)详解
  7. 拼装机器人感想_机器人学习心得总结
  8. wps怎么在中文后面加数字_怎样给wps底部加上页面数字 - 卡饭网
  9. 服务器sas系统盘损坏,磁盘阵列中SCSI、SAS硬盘由于一块或者多块有坏道引起操作系统产生如下故障...
  10. 开发DSP硬件驱动程序的一种方法
  11. 《东周列国志》第四十四回 叔詹据鼎抗晋侯 弦高假命犒秦军
  12. 动态规划练习三:换钱问题(动态规划概念理解与记忆搜索法概念理解对比)
  13. [IC]浅谈嵌入式MCU软件开发之中断优先级与中断嵌套
  14. opencv联合dlib人脸检测例子二(加快检测)
  15. jQuery基础--使用jQuery美化英雄联盟简介页
  16. 查看联通GPON/4+1+WiFi(2.4G)光猫管理员密码的一种思路
  17. 关于IOS7 AutoLayout的各种bug
  18. 【无标题】Android10 编译错误
  19. 51Nod-TalkingData数据科学精英夏令营挑战赛-B-丢手绢
  20. [ Python ] 常用类库学习之 tabulate

热门文章

  1. 编辑PDF文档无需购买会员;流失与版式分别是什么,PDF与OFD又有什么区别
  2. MySQL数据库安装手册
  3. linux ntfs 转换 无损,无损数据下NTFS转换FAT32分区
  4. 禁忌搜索算法求解 TSP 问题的代码示例
  5. QPSK和16QAM调制
  6. BC95(ML5515)连接TCP流程
  7. 原生Java萝卜影视4.0.5源码/完美修复完整版萝卜影视源码
  8. 手把手教你为 中文PDF电子书自动批量添加书签/目录, 彻底告别手动添加书签的烦恼
  9. 【考研计算机网络】 冲刺笔记
  10. 快乐课堂--寓教于乐、老师必备的课堂教学软件