使用.NET WebClient模拟XmlHttpRequest

使用XmlHttpRequest AFAIK我可以使用send方法下载和上传数据。 但WebClient有很多方法。 我不想要WebClient所有function。 我只想创建一个模拟XmlHttpRequest的对象,除了它没有XSS限制。 我也不关心将响应作为XML或甚至现在作为字符串。 如果我能把它作为一个足够好的字节数组。

我认为我可以使用UploadData作为我的通用方法,但是当尝试使用它下载数据时它会失败,即使它返回响应。 那么如何编写一个行为与XmlHttpRequestsend方法一样的方法呢?

编辑:我在这里找到了一个不完整的类,它正是一个XmlHttpRequest模拟器。 太糟糕了,整个代码都丢失了。

您需要使用HttpWebRequest 。

 HttpWebRequest rq = (HttpWebRequest)WebRequest.Create("http://thewebsite.com/thepage.html"); using(Stream s = rq.GetRequestStream()) { // Write your data here } HttpWebResponse resp = (HttpWebResponse)rq.GetResponse(); using(Stream s = resp.GetResponseStream()) { // Read the result here } 

你可以尝试这个静态函数来做同样的事情

 public static string XmlHttpRequest(string urlString, string xmlContent) { string response = null; HttpWebRequest httpWebRequest = null;//Declare an HTTP-specific implementation of the WebRequest class. HttpWebResponse httpWebResponse = null;//Declare an HTTP-specific implementation of the WebResponse class //Creates an HttpWebRequest for the specified URL. httpWebRequest = (HttpWebRequest)WebRequest.Create(urlString); try { byte[] bytes; bytes = System.Text.Encoding.ASCII.GetBytes(xmlContent); //Set HttpWebRequest properties httpWebRequest.Method = "POST"; httpWebRequest.ContentLength = bytes.Length; httpWebRequest.ContentType = "text/xml; encoding='utf-8'"; using (Stream requestStream = httpWebRequest.GetRequestStream()) { //Writes a sequence of bytes to the current stream requestStream.Write(bytes, 0, bytes.Length); requestStream.Close();//Close stream } //Sends the HttpWebRequest, and waits for a response. httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); if (httpWebResponse.StatusCode == HttpStatusCode.OK) { //Get response stream into StreamReader using (Stream responseStream = httpWebResponse.GetResponseStream()) { using (StreamReader reader = new StreamReader(responseStream)) response = reader.ReadToEnd(); } } httpWebResponse.Close();//Close HttpWebResponse } catch (WebException we) { //TODO: Add custom exception handling throw new Exception(we.Message); } catch (Exception ex) { throw new Exception(ex.Message); } finally { httpWebResponse.Close(); //Release objects httpWebResponse = null; httpWebRequest = null; } return response; } 

h 🙂