проблема с капчей

isaacfks

Пользователь
Регистрация
29.05.2023
Сообщения
90
Благодарностей
11
Баллы
8
всех приветствую. разработчики сервиса что-то незначительно обновили в отправке ответов, возможно какие то пути, но перестало работать. если коротко то просто ответ не приходит, возможно нужно пути изменить. Кто бы мог помочь исправить эту проблему? Имеется исходник решения hcaptcha, думаю там явно не трудно для человека кто разбирается. Могу отблагодарить в т.ч финансово
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 786
Благодарностей
2 450
Баллы
113
Здравствуйте!
Проблема в данном случае не с каптчей, а в том, что API сервиса отклоняет запросы, отправленные через ZennoPoster.
Что-то подобное происходило у меня при работе с другими API, тогда в ответ я получал 403 или 503 ошибку.
Значит чтобы долго не выдумывать проблема в отклонении проверки сертификата или в работе сервиса на HTTP/2 набросал решение с использованием CURL.
О работе с Curl писали в конкурсной статье: https://zennolab.com/discussion/threads/curl-otlichnaja-alternativa-dlja-vypolnenija-zaprosov-get-post.33699/

Так как архив в статье мог устареть, то переходим на официальный сайт на страничку: https://curl.se/windows/
Скачиваем файл: curl for 64-bit
В нем несколько файлов, нам нужны 2:
115189

Их ложим рядом с шаблоном.

Сам запрос выполнять можно примерно так:
C#:
string url = "";
string json="";
string api="";

string tempFilePath = Path.GetTempFileName();
File.WriteAllText(tempFilePath, json);

string[] data = {
    string.Format("-X POST {0}", url),
    string.Format("-H \"Content-Type: application/json\""),
    string.Format("-H \"apikey: {0}\"", api),        
    string.Format("-d @{0}", tempFilePath),
    "-k"
    };

var setting = new System.Diagnostics.ProcessStartInfo {
    CreateNoWindow = true,
    FileName = Path.Combine(project.Directory, "curl.exe"),
    Arguments = string.Join(" ", data),
    UseShellExecute = false,
    RedirectStandardOutput = true,
    RedirectStandardError = true
    };

using (var process = new System.Diagnostics.Process { StartInfo = setting }) {
    process.Start();
    string output = process.StandardOutput.ReadToEnd().Trim();
    string error = process.StandardError.ReadToEnd().Trim();
    process.WaitForExit();

    if (process.ExitCode != 0) {
        throw new Exception("ERROR curl. Exit Code: "+ process.ExitCode.ToString()+ ". Error: "+error.ToString());
    }
    return output;
}
}
В коде важно, что параметр -d шлет данные с временного файла, так как иначе ошибка при отправке, ведь размер base64 большой, Curl возмущается.
И параметр "-k" - который позволяет отказаться от проверки сертификата.
Ну, а сам Curl при необходимости пошлет запрос в HTTP/2 и не нужно переживать что проблема из-за этого.

Собственно после внесения данных изменений запрос до сайта доходит корректно.
 

volody00

Client
Регистрация
06.09.2016
Сообщения
917
Благодарностей
950
Баллы
93
Здравствуйте!
Проблема в данном случае не с каптчей, а в том, что API сервиса отклоняет запросы, отправленные через ZennoPoster.
Что-то подобное происходило у меня при работе с другими API, тогда в ответ я получал 403 или 503 ошибку.
Значит чтобы долго не выдумывать проблема в отклонении проверки сертификата или в работе сервиса на HTTP/2 набросал решение с использованием CURL.
О работе с Curl писали в конкурсной статье: https://zennolab.com/discussion/threads/curl-otlichnaja-alternativa-dlja-vypolnenija-zaprosov-get-post.33699/

Так как архив в статье мог устареть, то переходим на официальный сайт на страничку: https://curl.se/windows/
Скачиваем файл: curl for 64-bit
В нем несколько файлов, нам нужны 2:
Посмотреть вложение 115189
Их ложим рядом с шаблоном.

Сам запрос выполнять можно примерно так:
C#:
string url = "";
string json="";
string api="";

string tempFilePath = Path.GetTempFileName();
File.WriteAllText(tempFilePath, json);

string[] data = {
    string.Format("-X POST {0}", url),
    string.Format("-H \"Content-Type: application/json\""),
    string.Format("-H \"apikey: {0}\"", api),       
    string.Format("-d @{0}", tempFilePath),
    "-k"
    };

var setting = new System.Diagnostics.ProcessStartInfo {
    CreateNoWindow = true,
    FileName = Path.Combine(project.Directory, "curl.exe"),
    Arguments = string.Join(" ", data),
    UseShellExecute = false,
    RedirectStandardOutput = true,
    RedirectStandardError = true
    };

using (var process = new System.Diagnostics.Process { StartInfo = setting }) {
    process.Start();
    string output = process.StandardOutput.ReadToEnd().Trim();
    string error = process.StandardError.ReadToEnd().Trim();
    process.WaitForExit();

    if (process.ExitCode != 0) {
        throw new Exception("ERROR curl. Exit Code: "+ process.ExitCode.ToString()+ ". Error: "+error.ToString());
    }
    return output;
}
}
В коде важно, что параметр -d шлет данные с временного файла, так как иначе ошибка при отправке, ведь размер base64 большой, Curl возмущается.
И параметр "-k" - который позволяет отказаться от проверки сертификата.
Ну, а сам Curl при необходимости пошлет запрос в HTTP/2 и не нужно переживать что проблема из-за этого.

Собственно после внесения данных изменений запрос до сайта доходит корректно.
На free.site.com нормально же запросы идут, а для pro переделали зачем то. Первый раз о таком слышу, чтобы для api подобные ограничения вводили
 
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 786
Благодарностей
2 450
Баллы
113
На free.site.com нормально же запросы идут, а для pro переделали зачем то. Первый раз о таком слышу, чтобы для api подобные ограничения вводили
Они могут это сделать не сознательно.
Например подключили какую-то систему, которая например добавляет новый VPS когда один не справляется (короче сделали систему распределенной) - а там стоит какая-то штука, которая с целью оптимизации работает исключительно с защищенным соединением (например вебхук телеграма точно также отказывается работать, если соединение не https).
А проблема в том, что вместо того, чтобы ответить что мол мы работаем только с таким протоколом, или мы проверяем сертификат и тп - они просто обрывают соединение или вообще ничего не возвращают.
 
  • Спасибо
Реакции: volody00

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)