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

  • Автор темы Автор темы isaacfks
  • Дата начала Дата начала

isaacfks

Пользователь
Регистрация
29.05.2023
Сообщения
90
Реакции
11
Баллы
8
всех приветствую. разработчики сервиса что-то незначительно обновили в отправке ответов, возможно какие то пути, но перестало работать. если коротко то просто ответ не приходит, возможно нужно пути изменить. Кто бы мог помочь исправить эту проблему? Имеется исходник решения hcaptcha, думаю там явно не трудно для человека кто разбирается. Могу отблагодарить в т.ч финансово
 
Здравствуйте!
Проблема в данном случае не с каптчей, а в том, что API сервиса отклоняет запросы, отправленные через ZennoPoster.
Что-то подобное происходило у меня при работе с другими API, тогда в ответ я получал 403 или 503 ошибку.
Значит чтобы долго не выдумывать проблема в отклонении проверки сертификата или в работе сервиса на HTTP/2 набросал решение с использованием CURL.
О работе с Curl писали в конкурсной статье: https://zennolab.com/discussion/thr...iva-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 и не нужно переживать что проблема из-за этого.

Собственно после внесения данных изменений запрос до сайта доходит корректно.
 
Здравствуйте!
Проблема в данном случае не с каптчей, а в том, что API сервиса отклоняет запросы, отправленные через ZennoPoster.
Что-то подобное происходило у меня при работе с другими API, тогда в ответ я получал 403 или 503 ошибку.
Значит чтобы долго не выдумывать проблема в отклонении проверки сертификата или в работе сервиса на HTTP/2 набросал решение с использованием CURL.
О работе с Curl писали в конкурсной статье: https://zennolab.com/discussion/thr...iva-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
На free.site.com нормально же запросы идут, а для pro переделали зачем то. Первый раз о таком слышу, чтобы для api подобные ограничения вводили
Они могут это сделать не сознательно.
Например подключили какую-то систему, которая например добавляет новый VPS когда один не справляется (короче сделали систему распределенной) - а там стоит какая-то штука, которая с целью оптимизации работает исключительно с защищенным соединением (например вебхук телеграма точно также отказывается работать, если соединение не https).
А проблема в том, что вместо того, чтобы ответить что мол мы работаем только с таким протоколом, или мы проверяем сертификат и тп - они просто обрывают соединение или вообще ничего не возвращают.
 
  • Оценить
Реакции: volody00

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