Как отправить base64-форму?

207
18 марта 2018, 18:50

Rucaptcha.com просит отправить base64-форму в таком формате:

<form method="post" action="http://rucaptcha.com/in.php">
<input type="hidden" name="method" value="base64">
Ваш ключ:
<input type="text" name="key" value="YOUR_APIKEY">
Тело файла капчи в формате base64:
<textarea name="body">BASE64_FILE</textarea>
<input type="submit" value="Загрузить и получить ID">
</form>

У меня есть мой ApiKey и картинка в BASE64. Как мне отправить это на сервер?

Answer 1

Вообще, не легче использовать библиотеку для этого, к примеру эту? Хотя... она в этом случае лишняя.

Ну а так, код примерно следующий:

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;
}

Думаю по комментариям разберётесь. Тут вроде все довольно просто.

READ ALSO
Как можно определить с какой стороны следующая плитка в Unity?

Как можно определить с какой стороны следующая плитка в Unity?

Есть ли способ определить заранее с какой сторони плитка от плеера?

329
Вывод одной консольки в другую

Вывод одной консольки в другую

Есть два консольных приложения, одно из которых написано на другом языке и тд

186
Автообновление AutoCompleteCustomSource

Автообновление AutoCompleteCustomSource

У меня есть массив с коллекцией, а так же много textBoxов, которые должны использовать эту коллекцию в AutoCompleteCustomSource, при этом все textBoxы находятся...

216
android aQuery post отправить картинки на сервер C#

android aQuery post отправить картинки на сервер C#

пытаюсь отправить несколько картинок с андроида через http post запрос

234