request.GetResponse donne toujours un Timeout
J'ai fait une Fonction pour un programme, qui fonctionne lorsque le Type de Demande est GET
si elle est POST
elle produit toujours une Exception Délai(et le délai de 50 ans n'a pas été atteint) sur la Ligne HttpWebResponse response = (HttpWebResponse)request.GetResponse();
J'ai essayé beaucoup de choses, mais je ne marche pas trouvé pourquoi, quelqu'un peut-il ici le savent.
Edit: j'Ai à travailler, si quelqu'un est intéressé: https://gist.github.com/4347248
Toute aide sera grandement appréciée.
Mon Code est:
public ResRequest request(string URL, RequestType typ, CookieCollection cookies, string postdata ="", int timeout= 50000)
{
byte[] data;
Stream req;
Stream resp;
HttpWebRequest request = WebRequest.Create(URL) as HttpWebRequest;
request.Timeout = timeout;
request.ContinueTimeout = timeout;
request.ReadWriteTimeout = timeout;
request.Proxy = new WebProxy("127.0.0.1", 8118);
request.Headers.Add(HttpRequestHeader.AcceptLanguage, "de");
request.Headers.Add("UA-CPU", "x86");
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618) ";
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(cookies);
if (typ == RequestType.POST)
{
data = System.Text.Encoding.Default.GetBytes(postdata);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
req = request.GetRequestStream();//after a few tries this produced a Timeout error
req.Write(data, 0, data.Length);
req.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();//This line produces a Timeout Exception
resp = response.GetResponseStream();
if ((response.ContentEncoding.ToLower().Contains("gzip")))
{
resp = new System.IO.Compression.GZipStream(resp, System.IO.Compression.CompressionMode.Decompress);
} else if ((response.ContentEncoding.ToLower().Contains("deflate"))) {
resp = new System.IO.Compression.DeflateStream(resp, System.IO.Compression.CompressionMode.Decompress);
}
return new ResRequest() { result = new System.IO.StreamReader(resp, System.Text.Encoding.UTF8).ReadToEnd(), cookies = response.Cookies, cstring = cookiestring(response.Cookies) };
}
else
{
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
resp = response.GetResponseStream();
if ((response.ContentEncoding.ToLower().Contains("gzip")))
{
resp = new System.IO.Compression.GZipStream(resp, System.IO.Compression.CompressionMode.Decompress);
}
else if ((response.ContentEncoding.ToLower().Contains("deflate")))
{
resp = new System.IO.Compression.DeflateStream(resp, System.IO.Compression.CompressionMode.Decompress);
}
return new ResRequest() { result = new System.IO.StreamReader(resp, System.Text.Encoding.UTF8).ReadToEnd(), cookies = response.Cookies, cstring = cookiestring(response.Cookies) };
}
}
source d'informationauteur Tearsdontfalls
Vous devez vous connecter pour publier un commentaire.
Fait-il accrocher sur
req.GetRequestStream()
à chaque fois, ou ça fonctionne "à plusieurs reprises" et puis les accrocher?Si cela fonctionne quelques fois et puis se bloque, il est possible que vous n'êtes pas la fermeture de la demande correctement, ce qui provoque l'exécution de connexions. Assurez-vous de
Close()
et/ouDispose()
laHttpWebResponse
les objets et tous les Ruisseaux et les Lecteurs que vous êtes en train de créer.Vous devez utiliser
réponse.Dispose();
la fin de la méthode