Вот код, который использует объект WebRequest для извлечения данных и фиксирует реакцию в виде потока.
public static Stream GetExternalData(string url, string postData, int timeout)
{
ServicePointManager.ServerCertificateValidationCallback += delegate(object sender,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
// if we trust the callee implicitly, return true...otherwise, perform validation logic
return [bool];
};
WebRequest request = null;
HttpWebResponse response = null;
try
{
request = WebRequest.Create(url);
request.Timeout = timeout; // force a quick timeout
if(postData != null)
{
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postData.Length;
using(StreamWriter requestStream = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII))
{
requestStream.Write(postData);
requestStream.Close();
}
}
response = (HttpWebResponse)request.GetResponse();
}
catch(WebException ex)
{
Log.LogException(ex);
}
finally
{
request = null;
}
if(response == null || response.StatusCode != HttpStatusCode.OK)
{
if(response != null)
{
response.Close();
response = null;
}
return null;
}
return response.GetResponseStream();
}
Для управления ответ, у меня есть пользовательский Xhtml анализатор, который я использую, но это тысячи строк кода. Существует несколько общедоступных парсеров (см. Комментарий Дарина).
EDIT: по запросу OP заголовки могут быть добавлены в запрос для эмуляции пользовательского агента. Например:
request = (HttpWebRequest)WebRequest.Create(url);
request.Accept = "application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, */*";
request.Timeout = timeout;
request.Headers.Add("Cookie", cookies);
//
// manifest as a standard user agent
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US)";
Почему бы использовать контроль браузера, а не только с помощью объекта WebClient (или системы. Net.WebRequest)? –
Не используйте для этого элемент управления WebBrowser. – SLaks
Тим, SLaks, что вы рекомендуете, кроме управления WebBrowser. Я хочу, чтобы мой запрос выглядел человеком на целевом сайте. –