Я пытаюсь отправить запрос POST на сайт в C#, а затем проанализировать html в ответе, чтобы получить от него определенные имена элементов. Тем не менее, я получаю ошибку 408 около 50% времени, когда я запускаю программу. Вот мой код (большинство взято отсюда: https://msdn.microsoft.com/en-us/library/debx8sh9.aspx):Случайная ошибка 408 при запросе POST
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Collections.Generic;
using HtmlAgilityPack;
using System.Net;
using System.Diagnostics;
using Newtonsoft.Json.Linq;
using System.Linq;
using Fizzler.Systems.HtmlAgilityPack;
class FinderClass
{
//some irrelevant code here
public int getItemIndex(string itemName)
{
itemName = itemName.Replace(" ", "+"); //formatting for request
itemName = itemName.Replace("|", "%7C");
//taken from https://msdn.microsoft.com/en-us/library/debx8sh9(v=vs.110).aspx :
WebRequest request = WebRequest.Create("http://csgolounge.com/ajax/tradeCsRightTmp.php"); //address to send request
request.Method = "POST";
string postData = "type=Type+-+All&quality=0&exterior=0&fraze=" + itemName + "&search=1&page=1"; //request parameters
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = request.GetResponse();
Debug.WriteLine(((HttpWebResponse)response).StatusDescription);
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
Debug.WriteLine(responseFromServer); //print response to debug console (temporary)
reader.Close();
dataStream.Close();
response.Close();
return -1; //placeholder for when item index is parsed from html and returned
}
}
Исключение брошено:
Необработанное исключение типа «System.Net.WebException» произошло в System.dll
Дополнительная информация: Удаленный сервер возвратил ошибку: (408) Тайм-аут запроса.
Обычно я думаю, что есть прямое решение этого, но поскольку это происходит только в половине случаев, когда я запускаю программу, это может быть что-то более сложное.
Будьте осторожны при копировании кода из Интернета, даже с MSDN. Он написан для иллюстрации того, что автор хочет проиллюстрировать, а не как пример хорошего профессионального кода. В отправленном вами кодеке 'Stream',' WebResponse' и 'StreamReader' все должны находиться в' использовании' блоков. Попробуйте это и посмотрите, решит ли он проблему. Возможно, у вас закончились ресурсы, потому что во всех случаях вы не очищаетесь (например, если выбрано исключение). –
Проверьте этот вопрос, может быть, связан с вашими http://stackoverflow.com/questions/1667720/http-408-request-timeout – bateloche
@JohnSaunders У меня есть 'использование' в начале моего кода, если это то, что вы имеете в виду, но кроме этого я не уверен, что я действительно понимаю, что вы говорите (извините, я новичок в C#). – daltonv297