Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]cURL - post z hidden inputem + losowy adres strony
SSB
post 20.01.2016, 17:03:40
Post #1





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 21.12.2008
Skąd: Świnoujście

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
markuz
post 20.01.2016, 17:14:02
Post #2





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
SSB
post 20.01.2016, 17:23:07
Post #3





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 21.12.2008
Skąd: Świnoujście

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
markuz
post 20.01.2016, 17:28:35
Post #4





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
SSB
post 20.01.2016, 17:32:32
Post #5





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 21.12.2008
Skąd: Świnoujście

Ostrzeżenie: (0%)
-----


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

Ten post edytował SSB 20.01.2016, 17:35:42
Go to the top of the page
+Quote Post
markuz
post 20.01.2016, 17:42:13
Post #6





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


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');


--------------------
Go to the top of the page
+Quote Post
SSB
post 20.01.2016, 17:52:52
Post #7





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 21.12.2008
Skąd: Świnoujście

Ostrzeżenie: (0%)
-----


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

Ten post edytował SSB 20.01.2016, 17:53:59
Go to the top of the page
+Quote Post
markuz
post 20.01.2016, 18:05:56
Post #8





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


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.

Ten post edytował markuz 20.01.2016, 18:07:31


--------------------
Go to the top of the page
+Quote Post
SSB
post 20.01.2016, 18:12:58
Post #9





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 21.12.2008
Skąd: Świnoujście

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.07.2025 - 09:33