Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]cURL - post z hidden inputem + losowy adres strony
Forum PHP.pl > Forum > Przedszkole
SSB
Witam,
Próbuję wysłać formularz poprzez cURL, jednakowoż strona docelowa bardzo się przed tym broni. Ma token zmieniający się co odświeżenie strony, co nie było trudne do zrobienia. Formularz znajduje się na stronie http://xxxxxxxx.pl/formularz/. Jednakże po wysłaniu formularza strona za każdym razem ma inny adres strony. Trzy przykłady o co chodzi:
http://XXXXXXXX.pl/akceptuj/dA5zT/
http://XXXXXXXX.pl/akceptuj/dA5N9/
http://XXXXXXXX.pl/akceptuj/dA67l/
Czy jest możliwość wykonania tego? Adres strony jest generowany podejrzewam po numerze ID, więc ciężko z tym. Formularz odwołuje się do samego siebie (http://xxxxxxxxxxxx.pl/formularz/).
Pozdrawiam i z góry dziękuję za pomoc
markuz
W odpowiedzi wysłania formularza pewnie otrzymujesz przekierowanie w nagłowku, javascript lub w treści html. Podaj link to będzie łatwiej pomóc.
SSB
Chodzi o dodawanie ogłoszeń na olx.pl - formularz jest na stronie http://olx.pl/nowe-ogloszenie/, po wysłaniu formularza dostajemy się na stronę o adresie: http://olx.pl/nowe-ogloszenie/confirmpage/XXXXX/activate/ bądź http://olx.pl/nowe-ogloszenie/confirmpage/XXYZC/?track[new_ad]=1 przy użytkowniku zalogowanym.
markuz
http://olx.pl/nowe-ogloszenie/ POST Status Code:301 Moved Permanently

Nagłówki odpowiedzi:
Kod
HTTP/1.1 301 Moved Permanently
Date: Wed, 20 Jan 2016 16:26:13 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
location: http://olx.pl/nowe-ogloszenie/confirmpage/dA81b/activate/
X-B: tablica-dc4-106
X-T: D=339919 t=1453307173373521
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 20
Connection: close
Content-Type: text/html; charset=UTF-8


Jak widzisz, w location znajdziesz odpowiedni link.
SSB
Dzięki za pomoc, aczkolwiek nie rozwiązuje to mojego problemu. Na http://olx.pl/nowe-ogloszenie/ jest unikalny token (data[adding_key]), więc muszę wpierw wyciągnąć z tej strony ten token i dopiero na stronę późniejszą (tj. http://olx.pl/nowe-ogloszenie/confirmpage/dA81b/activate/) wysłać POST wraz z tym tokenem. Wysłanie na http://olx.pl/nowe-ogloszenie/ POSTa bez tokena wyświetla, że nie odnaleziono strony
markuz
Na http://olx.pl/nowe-ogloszenie/confirmpage/dA81b/activate/ wchodzisz przez GET, POST robisz na http://olx.pl/nowe-ogloszenie/ i tam faktycznie wysyłasz data[adding_key] który pobierasz ze źródła strony:
Kod
<input type="hidden" name="data[adding_key]" value="adding_569fb7ad009e79.72140125" />
za pomocą np. phpquery w ten sposób:
  1. $doc = phpQuery::newDocument($output); // html z formularzem
  2. $adding_key = pq('input[name=data[adding_key]]')->attr('value');
SSB
Cytat(markuz @ 20.01.2016, 17:42:13 ) *
Na http://olx.pl/nowe-ogloszenie/confirmpage/dA81b/activate/ wchodzisz przez GET, POST robisz na http://olx.pl/nowe-ogloszenie/ i tam faktycznie wysyłasz data[adding_key] który pobierasz ze źródła strony:
Kod
<input type="hidden" name="data[adding_key]" value="adding_569fb7ad009e79.72140125" />
za pomocą np. phpquery w ten sposób:
  1. $doc = phpQuery::newDocument($output); // html z formularzem
  2. $adding_key = pq('input[name=data[adding_key]]')->attr('value');


Z wyciągnięciem nie ma problemu - robię to tym:
  1. $content = file_get_contents('http://olx.pl/nowe-ogloszenie/');
  2. $doc = new DOMDocument();
  3. $doc->loadHTML($content);
  4. $tags = $doc->getElementsByTagName('input');
  5. foreach ($tags as $tag) {
  6. if($tag->getAttribute('name') === 'data[adding_key]') {
  7. $token = $tag->getAttribute('value');
  8. }
  9. }


Problem jest z tym, że wyciągnę adding_key za pomocą tego, po czym będę chciał wysłać POST na http://olx.pl/nowe-ogloszenie/ to na tą próbę będzie już nadany nowy adding_key, gdy tak próbuję robić wyskakuje mi komunikat OLX'owy "Szukaliśmy tej strony ale nie ma jej w naszym serwisie". Gdy zmienię adding_key za pomocą np. Tamper Data - wyskakuje to samo, więc myślę, że ten błąd spowodowany jest właśnie błędnym adding_key. Czyli nie mogę na stronę dodawania ogłoszenia wejść dwa razy. Na to osobiście nie mogę znaleźć rozwiązania.

edit: adding_key wyciągam przed wykonaniem cURLa, po wyciągnięciu przypisuję go do $post_data i dopiero wtedy odpala się cURL
markuz
A co robisz z resztą pól? Przechowywujesz ciasteczka w pliku? cURL może działać tak samo jak przeglądarka, z tym, że przeglądarka Ci wszystko ładnie wyświetla.
Wejdź w konsole (przeglądarka), zakładka sieć - musisz odwzorować wszystkie 3 requesty (1 GET formularz, 2 POST - dane formularza, 3 - Obsługa przekierowania) pamiętając o wszystkich polach.
SSB
Cytat(markuz @ 20.01.2016, 18:05:56 ) *
A co robisz z resztą pól? Przechowywujesz ciasteczka w pliku? cURL może działać tak samo jak przeglądarka, z tym, że przeglądarka Ci wszystko ładnie wyświetla.
Wejdź w konsole (przeglądarka), zakładka sieć - musisz odwzorować wszystkie 3 requesty (1 GET formularz, 2 POST - dane formularza, 3 - Obsługa przekierowania) pamiętając o wszystkich polach.


Reszta pól aktualnie (na czas próby rozwikłania zagadki) jest ustalona na stałe. Ciasteczka owszem przechowuję. Dzięki wielkie za pomoc, pobawię się z tym jeszcze wieczorem jak będę miał chwilę i jakby co dam znać, posprawdzam dokładnie to co mówisz (nagłówki) - jak nie dam rady, to napiszę smile.gif
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.