Zaczero/2Captcha

(solved) Biblioteka "zawiesza" program

Borgsc2 opened this issue · 8 comments

Witam ponownie.

Niestety nie wiem co robię źle ale biblioteka mi nie działa.

Mam następujący kod (wzięty z rozwiązania przykładowego)

 var twoCaptcha = new TwoCaptcha("API ID");
// Get current balance
// var balance = twoCaptcha.GetBalance().Result;

// Solve image captcha
var image1 = twoCaptcha.SolveImage(new FileStream("c:\\ESD\\doc\\captcha.png", FileMode.Open)).Result;

W momencie wejścia uruchomienia linii kodu zawierającej GetBalance lub Solveimage program zatrzymuje się na tej linii. Diagnostyka przy wspomnianej linii podaje komunikat "To jest następna instrukcja, która zostanie wykonana po powrocie tego wątku z bieżącej funkcji".
Dalsza analiza po pobraniu źródeł biblioteki i umieszczeniu ich w programie zamiast biblioteki dll pobranej z NuGet, wskazuje na problem w linii kodu zawierającej:

var inResponse = await _httpClient.PostAsync(*****)

Oczywiście zamiast gwiazdek jest odpowiedni kod wysyłający png lub pytający o saldo.

Na wskazanej linii program zatrzymuje się choć Diagnostyka pokazuje, że działa dalej lecz nie reaguje na dalsze polecenia .

Proces rozwiązywania trwa od 10 sekund do czasami nawet 45 (w przypadku ReCaptchaV2 od Google).
Jest to aplikacja konsolowa czy okienkowa (winform)? Jaka wersja .NET?

Warto też sprawdzić łączność z internet ponieważ PostAsync po prostu przesyła dane pod postacią HTTP/POST.

Jest to aplikacja okienkowa.

Program zatrzymuje się zawsze w linii biblioteki, odpowiadającej za wysłanie danych do 2capcha. Na stronie 2capcha nie pojawiają się żadne wysłane obrazy.

Zatrzymanie następuje nie zależnie czy chcę zapytać o pozostałe saldo czy wysłać obraz do rozwiązania.
Testy wykazały zatrzymanie się programu w liniach 39 i 57 w składowym pliku biblioteki TwoCaptcha.cs.

Innych funkcji biblioteki jeszcze nie testowałem.
Dotychczas korzystałem z innej jednak posiadała ona o wiele mniejsze możliwości od Twojej.
Obsługiwała tylko obrazy graficzne np solvemedia oraz reCaptcha od google .

Program nie ruszył dalej mimo pozostawienia go działającego na ok 10 minut, cały czas "wisiał" na linii 57 w TwoCaptcha.cs.

Zapomniałem napisać.
Używam Visual Studio 2019 Preview jak i VS 2017.
Testowane na .NET w wersji 4.6.1 i 4.7.2

Debugowanie wyświetla po zatrzymaniu na lini 57 następujące dane wyjściowe:

Wątek 0x203c zakończył działanie z kodem 0 (0x0).
Wątek 0x1404 zakończył działanie z kodem 0 (0x0).
Wątek 0x18b0 zakończył działanie z kodem 0 (0x0).
Wątek 0x34d4 zakończył działanie z kodem 0 (0x0).
Wątek 0x798 zakończył działanie z kodem 0 (0x0).
Wątek 0x3564 zakończył działanie z kodem 0 (0x0).

Spróbuj użyć await zamiast .Result w funkcji async.

Dzięki.

Użycie async i await ruszyło program do przodu.

Dziwne. Bo ja akurat tego problemu nie mam, a sprawdzałem na .NET Framework 4.6.1 Chyba tak czy siak zaktualizuję projekt przykładowy, żeby nikt nie miał już tego problemu :)

No właśnie jest to bardzo ciekawe.

Później zobaczę, czy to któryś z dodatków ładowanych przez using, nie powoduje tego problemu, bo tego jeszcze nie testowałem.

Niestety nie wiem co powoduje taki problem. Być może jakieś inne ustawienia projektu. Po usunięciu wywołań do wszelkich zewnętrznych bibliotek problem dalej występował.

Pozwoliłem sobie napisać do Ciebie na emaila :) odnośnie projektu nad którym po godzinach pracuje.
Choć IEM 2019 nie za bardzo na to pozwala ;)