使用 .NET WebClient 模拟 XmlHttpRequest

本文关键字:XmlHttpRequest 模拟 WebClient NET 使用 | 更新日期: 2023-09-27 17:57:02

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

我以为我可以使用 UploadData 作为我的通用方法,但是即使它返回响应,在尝试使用它下载数据时也会失败。那么我怎样才能写出一个行为与XmlHttpRequest send方法一样的方法呢?

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

使用 .NET WebClient 模拟 XmlHttpRequest

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

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;
}

HND :)

你需要使用 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
}