Нужно отправить POST запрос с параметрами и прочитать html в ответе. Вот мой метод :
public string HTMLContent(string uri, string postparametters = null)
{
try
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create(uri);
httpWebRequest.AllowAutoRedirect = false;
using (var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse())
{
using (var stream = httpWebResponse.GetResponseStream())
{
if (postparametters!= null)
{
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
byte[] postByteArray = encoding.GetBytes(postparametters);
stream.Write(postByteArray,0, postByteArray.Length); //!!!Ошибка
}
using (var reader = new StreamReader(stream, Encoding.GetEncoding(httpWebResponse.CharacterSet)))
{
return reader.ReadToEnd();
}
}
}
}
Вот строка POST параметров postparametters :
"CountTypeId=1&InGameExchanges=313&InGameIssuerId=185 280&Opener=FORM&UnderlyingType=3&filterBlockClosed=false"
На stream.Write падает исключение - NotSupportedException. Поток не поддерживает запись. Как это исправить ?
Мне кажется вы немного путаете get и post запросы.
В GET запросе идет отправка данных путем добавления необходимых параметров в саму адресную строку, что в итоге выглядит примерно так: сайт/resource?param1=value1¶m2=value2
В POST запросах правильней отправлять данные в теле запроса. Обычно это идет путем создания на сайтах различных форм.
Давайте посмотрим на скажем вот такой код:
public async Task<string> SendRequest(CancellationToken ct)
{
string data;
var baseAddress = new Uri("http...");
string url = "/data.php";
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("param1", "..."),
new KeyValuePair<string, string>("param2", "..."),
new KeyValuePair<string, string>("param3", "...")
});
using (var client = new HttpClient { BaseAddress = baseAddress })
{
var result = await client.PostAsync(url, content, ct);
var bytes = await result.Content.ReadAsByteArrayAsync();
Encoding encoding = Encoding.GetEncoding("utf-8");
data = encoding.GetString(bytes, 0, bytes.Length);
result.EnsureSuccessStatusCode();
}
return data;
}
Данный код отправит на указанный адрес запрос с телом, которое будет содержать закодированные параметры (param1, param2 и др..).
Пройдемся по порядку:
string data - нужна нам для дальнейшего возврата ответа от сервера (будь то HTML или API)var baseAddress = new Uri("http..."); - это корневой сайт, то есть http://сайт.ру. Без дальнейших значений по типу /data.php.string url = "/data.php"; - тут как раз указываем /data.php.var content = new FormUrlEncodedContent - это именно тело запроса, которое хотим отправить. FormUrlEncoderContent отлично сконвертирует все данные в подходящий для application/x-www-form-urlencoded запроса формат.POST запрос с нашим телом и получаем ответ в кодировке utf-8. По поводу кодировки кстати, можно использовать что то вроде data = await result.Content.ReadAsStringAsync();, убрав bytes и encoding, у меня лично сайт отдавал данные в кодировке utf-8, а не зарегистрированной utf8, все падало, пока явно не указал...В общем, ваш запрос должен грамотно создавать тело по стандартам и вам надо узнать что именно должен получить сервер от вас, может это JSON данные...
Удачи, пробуйте, надеюсь поможет!
Сборка персонального компьютера от Artline: умный выбор для современных пользователей