Reputation: 14736
I am unable to make a post request to a URL using HttpWebRequest. I have applied all the suggestions I have seen online. Most answers on SO suggest specifying a user agent. I have done that and provided a timeout as well but still I get a timeout. I saw another post where it was mentioned to specify readwritetimeout instead. Still I get the same response, "Server Timed out". Making the post using a browser works within a second, but using code in C# gives the timeout issue. Here is my code:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.ContentType = "application/x-www-form-urlencoded";
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2288.6 Safari/537.36";
request.Method = "POST";
request.KeepAlive = true;
request.CookieContainer = new CookieContainer();
request.Accept = "*/*";
request.ReadWriteTimeout = System.Threading.Timeout.Infinite;
request.Headers.Add("Accept-Encoding: gzip, deflate");
request.Headers.Add("Accept-Language: en-US");
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string Response = reader.ReadToEnd();
I am getting a timeout at this line:
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Am I missing something here?
Here is the log after switching on diagonostics in the config.
System.Net Verbose: 0 : [0280] WebRequest::Create(http://mysite.url.here)
System.Net Verbose: 0 : [0280] HttpWebRequest#13062350::HttpWebRequest(http://mysite.url.here)
System.Net Information: 0 : [0280] Current OS installation type is 'Client'.
System.Net Information: 0 : [0280] RAS supported: True
System.Net Verbose: 0 : [0280] Exiting HttpWebRequest#13062350::HttpWebRequest()
System.Net Verbose: 0 : [0280] Exiting WebRequest::Create() -> HttpWebRequest#13062350
System.Net Error: 0 : [0280] Can't retrieve proxy settings for Uri 'http://mysite.url.here'. Error code: 12180.
System.Net Verbose: 0 : [0280] ServicePoint#10366524::ServicePoint(http://mysite.url.here:80)
System.Net Information: 0 : [0280] Associating HttpWebRequest#13062350 with ServicePoint#10366524
System.Net Verbose: 0 : [0280] HttpWebRequest#13062350::GetRequestStream()
System.Net Information: 0 : [0280] Associating Connection#63840421 with HttpWebRequest#13062350
System.Net Information: 0 : [0280] Connection#63840421 - Created connection from 192.168.1.5:13902 to 199.249.234.200:80.
System.Net Information: 0 : [0280] Associating HttpWebRequest#13062350 with ConnectStream#54246671
System.Net Information: 0 : [0280] HttpWebRequest#13062350 - Request: POST /Post-url-here HTTP/1.1
System.Net Information: 0 : [0280] ConnectStream#54246671 - Sending headers
{
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, likeGecko) Chrome/42.0.2288.6 Safari/537.36
Accept-Encoding: gzip, deflate
Accept-Language: en-US
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Host: www.powersportrider.com
Content-Length: 101
Expect: 100-continue
Connection: Keep-Alive
}.
System.Net Verbose: 0 : [0280] Exiting ConnectStream#54246671::Write()
System.Net Verbose: 0 : [0280] ConnectStream#54246671::Close()
System.Net Verbose: 0 : [0280] Exiting ConnectStream#54246671::Close()
System.Net Verbose: 0 : [0280] HttpWebRequest#13062350::GetResponse()
System.Net Information: 0 : [0280] Connection#63840421 - Received status line: V
ersion=1.1, StatusCode=100, StatusDescription=Continue.
System.Net Information: 0 : [0280] Connection#63840421 - Received headers
{
}.
System.Net Verbose: 0 : [8668] HttpWebRequest#13062350::Abort(The operation hastimed out)
System.Net Verbose: 0 : [8668] Exiting HttpWebRequest#13062350::Abort()
System.Net Error: 0 : [0280] Exception in HttpWebRequest#13062350:: - The operation has timed out.
System.Net Error: 0 : [0280] Exception in HttpWebRequest#13062350::GetResponse - The operation has timed out.
System.Net Error: 0 : [0280] Exception in AppDomain#12036987::UnhandledException
Handler - The operation has timed out. at System.Net.HttpWebRequest.GetResponse()
Upvotes: 3
Views: 10390
Reputation: 465
I was getting this issue because one of the parameters was getting sent in capital letters and it was supposed to be in small letters (Silly mistake). Hope this may help somebody doing same mistake as me.
Upvotes: 0
Reputation: 8007
I had the very same issue. For me the fix was as simple as wrapping the HttpWebResponse code in using block.
using (HttpWebResponse response = (HttpWebResponse) request.GetResponse())
{
// Do your processings here....
}
This issue usually happens if you make several requests to the same host, and WebResponse
is not disposed properly. That is why the using block comes here as a savior.
Upvotes: 2
Reputation: 14736
Turns out all I need to do to get this to work was add the following lines before the request.GetResponse()
call
request.ServicePoint.Expect100Continue = false;
request.ProtocolVersion = HttpVersion.Version11;
Hope the hours I spent on this helps someone else out quicker.
Upvotes: 5