Вот код, который использует объект 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, который я использую, но это тысячи строк кода. Есть несколько общедоступных парсеров (см. Комментарий Дарина).
РЕДАКТИРОВАТЬ: в соответствии с вопросом ОП, заголовки могут быть добавлены к запросу для эмуляции агента пользователя. Например:
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)";