[C#] TestHttpPost:测试Http的POST方法的小工具
作者: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方法的小工具相关推荐
- 一个目前很火的文字转语音方法,小工具为你的视频配音
随着短视频的爆火文字转语音也火热起来,在大家制作短视频的时候我想应该是常常遇到需要配音的场景,其实文字转语音的应用还是非常广泛的,短视频一些广播中都有文字转换成语音的功能,短视频说起来其实就是一些短视 ...
- mailbox 编程_Ring的Mailbox Sensor是我测试过的书呆子智能家居小工具之一
我小时候最喜欢的电影之一是<宝贝,我缩小孩子们>.在其中,主要人物韦恩·萨林斯基(Wayne Szalinski)是一位宅急如焚的科学家,小工具小发明家,他在阁楼上产生了收缩射线,意外地缩 ...
- 测试工作中常用在线小工具-初级篇
背景 测试过程中经常需要用到一些工具来校验数据的正确性,并且可以帮助测试人员更好的定位问题,所以我总结了我这个初级测试小白日常测试使用的小工具~ 1.在线json转换: http://www.bejs ...
- 测试分析设计工程方法
产品的测试分析设计包括:测试需求分析.测试方案设计.测试用例实现,这三个阶段.测试分析设计工程方法是针对于前两个阶段的,现实中往往需要灵活运用多个工程方法,重点需要掌握各个工程方法的思路,在实践中不断 ...
- python性能测试方法_Python实现测试磁盘性能的方法
本文实例讲述了Python实现测试磁盘性能的方法.分享给大家供大家参考.具体如下: 该代码做了如下工作: create 300000 files (512B to 1536B) with data f ...
- selenium自动化测试_维持Selenium测试自动化的完美方法
selenium自动化测试 毫无疑问, 自动浏览器测试已改变了软件开发的工作方式. 如果不是Selenium,我们将无法像我们一样使用各种各样的无错误的Web应用程序. 但是有时,甚至IT部门也误解了 ...
- 维持硒测试自动化的完美方法
毫无疑问, 自动浏览器测试已经改变了软件开发的工作方式. 如果不是Selenium,我们将无法像我们一样使用各种各样的无错误Web应用程序. 但是有时,甚至IT部门也误解了自动化一词. 大多数人认为计 ...
- python可以开发驱动吗_Python机器学习实践:测试驱动的开发方法
Python机器学习实践:测试驱动的开发方法 作者:(美)马修·柯克(Matthew Kirk) 著 出版日期:2017年10月 文件大小:30.91M 支持设备: ¥40.00在线试读 适用客户端: ...
- android 回归测试,android测试:monkey使用方法
android测试:monkey使用方法 Android Sdk给我们提供了Monkey和Monkeyrunner这两个自动化测试工具. 一.什么是Monkey Monkey是一个命令行工具,可以运行 ...
- win7系统稳定测试软件,win7系统电脑测试cpu性能的方法(图文)
一般情况,购买电脑都比较注重cpu性能,cpu是一台计算机的运算核心和控制核心,所以是非常重要的.很多用户遇到win7系统电脑开机CPU就达到80多度,并且会自动关机或重启,非常麻烦,怎么回事呢?这种 ...
最新文章
- 区块链BaaS云服务(33)印度国家支付 Vajra Platform
- CentOS 6.x 快速安装L2TP ***
- 删除Windows 7自动创建的隐藏分区
- 勒索团伙正奔向 SonicWall 设备
- 流媒体技术学习笔记之(十五)FFmpeg编码遇到的错误、警告、Debug记录
- 数论 中国剩余定理(孙子定理)详解
- 拼装机器人感想_机器人学习心得总结
- wps怎么在中文后面加数字_怎样给wps底部加上页面数字 - 卡饭网
- 服务器sas系统盘损坏,磁盘阵列中SCSI、SAS硬盘由于一块或者多块有坏道引起操作系统产生如下故障...
- 开发DSP硬件驱动程序的一种方法
- 《东周列国志》第四十四回 叔詹据鼎抗晋侯 弦高假命犒秦军
- 动态规划练习三:换钱问题(动态规划概念理解与记忆搜索法概念理解对比)
- [IC]浅谈嵌入式MCU软件开发之中断优先级与中断嵌套
- opencv联合dlib人脸检测例子二(加快检测)
- jQuery基础--使用jQuery美化英雄联盟简介页
- 查看联通GPON/4+1+WiFi(2.4G)光猫管理员密码的一种思路
- 关于IOS7 AutoLayout的各种bug
- 【无标题】Android10 编译错误
- 51Nod-TalkingData数据科学精英夏令营挑战赛-B-丢手绢
- [ Python ] 常用类库学习之 tabulate