Эмулируйте XmlHttpRequest с.NET WebClient
AFAIK с XmlHttpRequest
Я могу скачать и загрузить данные только с send
метод. Но WebClient
Есть много методов. Я не хочу всю функциональность WebClient
, Я просто хочу создать объект, который имитирует XmlHttpRequest
за исключением того, что он не имеет ограничений XSS. Я также не забочусь о получении ответа в виде XML или даже в виде строки прямо сейчас. Если я могу получить его в виде массива байтов, это достаточно хорошо.
Я думал, что я мог бы использовать UploadData
как мой универсальный метод, но он терпит неудачу при попытке загрузить данные с ним, даже если он возвращает ответ. Итак, как я могу написать метод, который ведет себя так же, как XmlHttpRequest
"s send
метод?
Редактировать: я нашел неполный класс, который точно XmlHttpRequest
эмулятор здесь. Жаль, что весь код потерян.
2 ответа
Вам нужно будет использовать 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;
}
хнд:)