2016-05-03 1 views
4

Ich habe eine Aufgabe, in der ich in der Lage sein muss, Connection: Keep-Alive-Header auf die gleiche Weise wie im Firefox-Browser zu senden (beachten Sie, dass Keep-Alive muss alle Kleinbuchstaben sein):Wie setze ich "Verbindung: keep-alive" Header in Kleinbuchstaben durch HttpClient?

"Connection: keep-alive" 

Allerdings hatte ich kein Glück, es mit HttpClient zu erreichen. Egal, was ich versuche, immer die Anforderung

"Connection: Keep-Alive" 

Hier haben Sie ein Beispiel-Code:

var client = new HttpClient(); 
var request = new HttpRequestMessage() 
{ 
    RequestUri = new Uri("http://www.someURI.com"), 
    Method = HttpMethod.Get, 
}; 
request.Headers.Connection.Clear(); // No need to do it as it is empty anyway 
request.Headers.Connection.Add("keep-alive"); // Still results in "Keep-Alive" 
var task = client.SendAsync(request); 

Ein weiterer Versuch:

var client = new HttpClient(); 
client.DefaultRequestHeaders.Clear(); 
client.DefaultRequestHeaders.Connection.Add("keep-alive"); // Still results in "Keep-Alive" 
string result = await client.GetStringAsync("http://www.someURI.com"); 

Es gibt eine Antwort, wie es getan werden kann in HttpWebRequest: How to send lower-case Keep-Alive header through HttpWebRequest

Wäre etwas ähnliches in HttpClient möglich?

Antwort

1

Dieses Problem ist nur vorhanden, wenn Sie Code auf Windows-Plattform laufen. Es ist in .NET und .NET Core 2.0 vorhanden. Der Grund dafür liegt in der Win32-Bibliothek "winhttp.dll", die eine fest codierte Zeichenfolge für "Keep-Alive" enthält. Wenn Sie es also unter Windows benötigen, müssen Sie etwas an dieser DLL vornehmen.

Die gute Nachricht ist, dass dieses Problem nicht Linux nicht beeinträchtigt Plattformen läuft Mono oder .NET-Core 2.0

1

Für HTTP-Server spielt es keine Rolle, ob "Keep-Alive" groß geschrieben wird oder nicht. Fügen Sie einfach den Text "keep-alive" oder "Keep-Alive" oder "KEEP_ALIVE" hinzu, dann sollten Sie gleich behandelt werden.

hoffe das hilft.

+2

Althought die Spezifikation sagt, dass es sollte keine Rolle spielen, ich habe vor kurzem in einige Hosts laufen, dass das ablehnen Anfrage als Verboten, wenn es nicht in Kleinbuchstaben ist. Wild und ärgerlich, ich weiß. – crush

1

Haben Sie versucht, dies:

var client = new HttpClient(); 
client.DefaultRequestHeaders.Add("Connection", "keep-alive"); 

Es gibt dies:

enter image description here

+0

Ich benutze .NET 4.5. –

+0

Ich benutze eine Sniffing-Software, um die HTTP-Anfragen (so etwas wie Wireshark) zu sehen. In meinem Fall entwickle ich auf Xamarin.Android, verwende ich die Android-Anwendung namens "Packet Capture". –

+0

Und wenn Sie es in "Keep-Alive" ändern, kommt es auch als "Keep-Alive" durch? Ich möchte nur Werkzeugeinschränkungen ausschließen. – foobar

Verwandte Themen