I'm trying to send the same information from my application as I send from the browser. Here is part of data captured by Fiddler:
POST http://something/ HTTP/1.1
Host: something.com
Connection: keep-alive
I got stuck with this connection property. If I set the property keep-alive to true, in Fiddler I see this:
Proxy-Connection: Keep-Alive
If I try to set the connection property to Keep-alive, I get this error:
Keep-Alive and Close may not be set using this property.
How to write the code so that in Fiddler I can see this:
Connection: keep-alive
My full code:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://myUrl ");
request.Method = "POST";
request.ProtocolVersion = HttpVersion.Version11;
request.Accept = "*/*";
WebHeaderCollection headers = new WebHeaderCollection();
headers.Add("Accept-Encoding", "myEncoding");
headers.Add("Accept-Language", "myLang");
request.Headers = headers;
request.ContentType = "myContentType";
request.Referer = "myReferer";
request.UserAgent = "myUserAgent";
ASCIIEncoding encoding = new ASCIIEncoding();
string postData = "myData";
byte[] data = encoding.GetBytes(postData);
request.GetResponse().Close();
To have your application send a Connection: Keep-Alive
header, use the KeepAlive property on the HttpWebRequest
object.
When a client knows that it is behind a proxy (like Fiddler), it may send a Proxy-Connection: Keep-Alive
header instead of a Connection: Keep-Alive
header. The expectation is that a HTTP/1.1 proxy (like Fiddler) will convert that header from Proxy-Connection
to Connection
before passing it to the upstream server.
This "proxy renames header" pattern was introduced many years ago to attempt to workaround hangs in HTTP/1.0 servers that didn't support Keep-Alive
properly; the idea is that the server would ignore the Proxy-Connection
header if the outdated proxy didn't rename the header by removing the Proxy-
prefix.