In general, is it not easier to use the library for this, for example this one ? Although ... it is in this case superfluous.
Well, and so, the code is about the following:
public async Task<string> SendRequest(CancellationToken ct) { string data; var baseAddress = new Uri("http://rucaptcha.com"); //Базовый адрес var url = "/in.php"; //Нужная нам страница, на которую пойдет запрос using (var client = new HttpClient { BaseAddress = baseAddress }) { var content = new FormUrlEncodedContent(new[] //для удобства можно использовать Dictionary<string, string>. Тогда тело будет ещё короче ["key"] = "YOUR_APIKEY", ["body"] = "BASE64_FILE" { new KeyValuePair<string, string>("key", "YOUR_APIKEY"), new KeyValuePair<string, string>("body", "BASE64_FILE") }); //Наше тело, которое при помощи FormUrlEncodedContent закодируется в нужное нам "тело". var result = await client.PostAsync(url, content, ct); //Отправляем на нужную страницу POST запрос с нашем телом, также тут используется CancellationToken для грамотной отмены async методов. var bytes = await result.Content.ReadAsByteArrayAsync(); Encoding encoding = Encoding.GetEncoding("utf-8"); data = encoding.GetString(bytes, 0, bytes.Length); //Все эти три строки добавлены тут для того, что бы получать данные в нужной нам кодировке (некоторые сервера к примеру выдают в неверной кодировке и может выдать ошибку). Вообще можно все 3 строки заменить на одну: //data = await result.Content.ReadAsStringAsync(); Тогда кодировка будет той, что выдает сервер. result.EnsureSuccessStatusCode(); } return data; }
I think the comments will understand. It's all pretty simple here.