很久不更新博客了,这次大概说一下C#中的Send WebRequest,众所周知,.NET网络编程在测试中是非常常见的,具体来说,比如我们如果测试一个API,通过Send WebRequest的方式来进行API层面的功能测试,然后用Selenium完成前端的验证,这种模式应该说是比较方便而通用的,具体以其中常见的HTTP request为例,当我们需要传输数据时,需要 1)地址:Address作为Webrequest参数实例化,然后设定相应属性,比如Method(Get还是Post等等) 2)数据:Data作为HttpRequest的数据流写入: XmlResponse = null; ResponseCode = HttpStatusCode.Unused; ServerResponse = String.Empty; 参数处理部分
//Format the data string output = data.Aggregate(String.Empty, (current, keyValuePair) => current + ("&" + keyValuePair.Key + "=" + HttpUtility.UrlEncode(keyValuePair.Value))); var encoding = new UTF8Encoding(); //设置PostData变量将output进行处理,终得到byte[] d作为终数据写入到WebRequest中 var Postdata = Encoding.ASCII.GetBytes(output); byte[] d = encoding.GetBytes(output.Substring(1, output.Length - 1)); var address = TargetUrl; //GET部分的数据处理 if (method.ToUpperInvariant() == "GET") address=address+output; //POST部分的数据处理 WebRequest request = WebRequest.Create(address) as HttpWebRequest; //Add post process if (request == null) throw new Exception("WebRequest object is null."); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = d.Length; ServerResponse = String.Empty; //数据读取及处理部分 using (Stream dataStream = request.GetRequestStream()) { dataStream.Write(d, 0, d.Length); dataStream.Close(); using (var response = (HttpWebResponse)request.GetResponse()) { ResponseCode = response.StatusCode; using (Stream myStream = response.GetResponseStream()) { if (myStream != null) { var readStream = new StreamReader(myStream, Encoding.UTF8); ServerResponse = readStream.ReadToEnd(); } } response.Close(); } } if (ResponseCode == HttpStatusCode.OK) { if (loadXml) LoadXml(); return true; } return false; |