Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: cURL wysłanie formularza + cookie (webapi allegro)
Forum PHP.pl > Forum > PHP
duch4ever
Witam, mam problem z webapi allegro. Mają ustawiony limit zapytań po przekroczeniu którego IP jest blokowane i trzeba przejść pod adres http://webapi.allegro.pl/blocked/index.php wpisać captche i blokada znika. Trzeb tam przejść z IP na którym jest blokada i w przypadku serwerów www jest problem...

Pomyślałem że można by wykorzystać cURL, pobrać obrazek captcha i wysłać zapytanie przez cURL z kodem i ciastkiem. Niby wszystko jest ok ale formularz zawiera dodatkowo token...

Formularz:
  1. <form action="/blocked/index.php" method="post">
  2. <img src="/blocked/image.php" class="captcha" alt="">
  3. <br>
  4. <input type="hidden" name="get" value="">
  5. <input type="text" name="code" value="">
  6. <input type="hidden" name="token" value="8e09b646910c088b24b5a331548e4ebd">
  7. <input type="submit" value="Prześlij kod">
  8. </form>


Po pobraniu formularza przez cURL nie ma tego tokena w kodzie html a bez niego formularz nie przechodzi. HELP!
Mój kod:

  1. $ch = curl_init();
  2. curl_setopt($ch, CURLOPT_URL, "http://webapi.allegro.pl/blocked/index.php");
  3. curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '\tmp\cookie.txt');
  4. curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '\tmp\cookie.txt');
  5. curl_setopt($ch, CURLOPT_HEADER, 1);
  6. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  7. curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
  8. $rawdata = curl_exec($ch);
  9.  
  10. curl_close($ch);
  11.  
  12. var_dump($rawdata);
NickOver
A nie łatwiej daćprzerwy między requestami?
duch4ever
Dodałem sleep(3); ale nie pomaga.
Co ciekawe lokalnie kod działa i token się pojawia a na serwerze nazwa.pl już nie ;/, ciastko lokalna ma więcej parametrów.
W czym może być różnica?
modern-web
Poczytaj o CSRF, to zabezpieczenie, które stosuje się we wszystkich nowoczesnych aplikacjach.
Formularz powinien zostać wypełniony na tamtej stronie, możesz go wyświetlić w ramce iframe jeżeli bardzo Ci na tym zależy.
duch4ever
Dzięki za info, za zabezpieczenie jak mniemam odpowiada owy token, ale dlaczego raz się pojawia w formularzu pobranym przez cURL a raz nie?
Iframe raczej odpada bo formularz musi być wysłany z IP serwera a nie mojego.
modern-web
Tak, token musi być przesłany bo określa on po części "intencje" użytkownika i blokuje spamowanie takich endpointów przez boty.
Dlaczego jednak czasami go otrzymujesz a czasami nie, to nie mam pojęcia. Musisz zbadać problem, może to są różne formularze? Albo jeżeli używasz regex-a to masz zły wzorzec. No nie wiem, za mało informacji żebym mógł cokolwiek stwierdzić.
duch4ever
Regex jest ok bo podglądam również kod dla pewności, token nie pojawia się jeśli wyłączę cookies w przeglądarce ale dlaczego przy identycznym skrypcie cURL czasem działa a czasem nie?

Może jest jakiś inny sposób przy puścić ruch przez serwer (bez dostępu do ssh itp.)?
modern-web
Możesz wywołać file_get_contents ale to prymitywne rozwiązanie.
Próbowałeś szukać jakiś bibliotek do takich rzeczy? Jest tego masa.
duch4ever
Każda z bibliotek działa na bazie cURL więc działa tak samo jak mój kod.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.