.net 后台 发送http请求
今天收到测试提的一个BUG,经过调式发现,所写的服务中因为要传大量参数,造成字符串超长,之前用的webclint执行Get方法请求服务器,服务器端数据就会不完整,所以就抛出了异常。
首先想到的改进方法就是用POST请求服务器,在MSDN上查找了一些资料,写个简单的HttpWebRequest使用POST方法请求服务器的方法。
public bool AddData(string authors,string title) { String url = ”http://localhost/Services/postdata.aspx”; HttpWebRequest hwr = WebRequest.Create(url) as HttpWebRequest; hwr.Method = “POST”; hwr.ContentType = “application/x-www-form-urlencoded”; string postdata = “title=” + title + “&authors=” + authors; byte[] data = Encoding.UTF8.GetBytes(postdata); using (Stream stream = hwr.GetRequestStream()) { stream.Write(data, 0, data.Length); } var result = hwr.GetResponse() as HttpWebResponse; log.Info(“处理结果:” + WebResponseGet(result)); return true; }
这样就完成了一个简单的POST请求,其中hwr.ContentType = “application/x-www-form-urlencoded”这句话很重要,如果不加的话,服务端将收不到客户发送的数据。另外,在输出日志 的时候用到的WebResponseGet(result)方法其实就是将stream输出成文本的方法,因为在执行请求后服务器返回的是一个文件流,所 以结果需要将文件流读出来。
public string WebResponseGet(HttpWebResponse webResponse) { StreamReader responseReader = null; string responseData = “”; try { responseReader = new StreamReader(webResponse.GetResponseStream()); responseData = responseReader.ReadToEnd(); } catch { throw; } finally { webResponse.GetResponseStream().Close(); responseReader.Close(); responseReader = null; } return responseData; }