Ich versuche, die System.Net.HttpWebRequest Klasse zu verwenden, um eine HTTP-GET-Anfrage an einen bestimmten Web-Server für Webanwendungen, die wir über zahlreiche Server ausgeglichen haben. Um dies zu erreichen, muss ich in der Lage sein, den Host-Header-Wert für die Anfrage zu setzen, und das konnte ich mit der Klasse System.Net.WebProxy erreichen.Wie setze ich einen Host-Header-Wert für SSL-Anfragen mit HttpWebRequest
Allerdings bricht dies alles zusammen, wenn ich versuche, ein GET mit SSL durchzuführen. Wenn ich dies versuche, löst der Aufruf von HttpWebRequest.GetResponse eine System.Net.WebException mit einem HTTP-Statuscode von 400 (Bad Request) aus.
Was versuche ich mit HttpWebRequest zu erreichen, oder sollte ich nach einem alternativen Weg suchen, um das zu leisten, was ich will?
Hier ist der Code, den ich verwendet habe, dies zu versuchen und erhalten Sie alle zu arbeiten: -
using System;
using System.Web;
using System.Net;
using System.IO;
namespace UrlPollTest
{
class Program
{
private static int suffix = 1;
static void Main(string[] args)
{
PerformRequest("http://www.microsoft.com/en/us/default.aspx", "www.microsoft.com");
PerformRequest("https://www.microsoft.com/en/us/default.aspx", "");
PerformRequest("https://www.microsoft.com/en/us/default.aspx", "www.microsoft.com");
Console.WriteLine("Press any key to continue");
Console.ReadKey();
}
static void PerformRequest(string AUrl, string AProxy)
{
Console.WriteLine("Fetching from {0}", AUrl);
try
{
HttpWebRequest request = WebRequest.Create(AUrl) as HttpWebRequest;
if (AProxy != "")
{
Console.WriteLine("Proxy = {0}", AProxy);
request.Proxy = new WebProxy(AProxy);
}
WebResponse response = request.GetResponse();
using (Stream httpStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(httpStream))
{
string s = reader.ReadToEnd();
File.WriteAllText(string.Format("D:\\Temp\\Response{0}.html", suffix++), s);
}
}
Console.WriteLine(" Success");
}
catch (Exception e)
{
Console.WriteLine(" " + e.Message);
}
}
}
}
Echte Frage: Woher wissen Sie, dass Sie einen Host-Header benötigen? "HTTP 1.1-Hostheader werden bei Verwendung von SSL nicht unterstützt" http://support.microsoft.com/kb/187504. – russau
Zweiter Gedanke: Können Sie die Datei über SSL in einem Browser abrufen? – russau
Ich muss einen Host-Header festlegen, damit ich den genauen Server angeben kann, der betroffen ist, wenn die Webanwendung auf mehrere Server verteilt ist. Dieser Code ist Teil eines Web-Monitoring- und Testing-Frameworks, an dem ich schreibe. Und ja, die SSL-Anfragen, die ich versuche zu machen, funktionieren im Browser, so liegt das Problem irgendwo in der Art, wie ich ähnliche Funktionalität im Code implementieren möchte. Der Artikel, den Sie verlinkt haben, schlägt vor, dass die Host-Header-Unterstützung für SSL-Anforderungen in Windows Server 2003 SP1 verfügbar gemacht wurde und alle unsere Server vollständig gepatcht sein sollten. – Cleggy