Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: CURL - Wysyłanie danych tak aby skrypt odebrał je jako POST a nie GET.
Forum PHP.pl > Forum > PHP
akurczyk
Witam
Pisze skrypt do darmowego, automatycznego pobierania plików z serwisu RapidShare.
  1. <?php
  2. $hand = curl_init();
  3. curl_setopt($hand, CURLOPT_URL, "http://rapidshare.com/files/180164458/Malcolm_In_The_Middle_-_1x01_-_Pilot.part1.rar");
  4. curl_setopt($hand, CURLOPT_RETURNTRANSFER, true);
  5. $output = curl_exec($hand);
  6. curl_close($hand);
  7. preg_match("/<form id=\"ff\" action=\"(.*)\" method=\"post\">/S", $output, $matches);
  8. $hand2 = curl_init();
  9. curl_setopt($hand2, CURLOPT_URL, $matches[1]);
  10. curl_setopt($hand2, CURLOPT_POST, true);
  11. curl_setopt($hand2, CURLOPT_POSTFILEDS, "dl.start=Free");
  12. curl_setopt($hand2, CURLOPT_RETURNTRANSFER, true);
  13. $output2 = curl_exec($hand2);
  14. curl_close($hand2);
  15. echo $output2;
  16. ?>

Skrypt nie działa, bo docelowy skrypt musi odebrać zmienną "dl.start=Free" jako POST a nie GET. W manualu nie udało mi się znaleźć opcji która umożliwiła by ni to umożliwiła. Co mam zrobić aby wysłać dane GETem a nie POSTem? questionmark.gif
R4D3K
Aby wysłać dane GET poprostu je doklejasz do linka:
  1. <?php
  2. curl_setopt($hand, CURLOPT_URL,"http://example.com?nazwa_zmiennej=wartosc&nazwa_zmienej2=wartosc2");
  3. ?>
akurczyk
To dlaczego mój skrypt nie działa?questionmark.gif
  1. <form id="ff" action="http://rs286.rapidshare.com/files/180164458/Malcolm_In_The_Middle_-_1x01_-_Pilot.part1.rar" method="post">
  2. <input name="dl.start" value="Free" type="hidden">
  3. <img src="/img2/dl_langsam.gif">
  4. <br>
  5. <input value="Free user" type="submit">
  6. </form>
R4D3K
No teraz to ostro zamotałeś
Cytat
(...) skrypt musi odebrać zmienną "dl.start=Free" jako POST a nie GET (...)
Co mam zrobić aby wysłać dane GETem a nie POSTem?

Zdecyduj się w końcu czym chcesz wysłać.
Jeśli chodzi o wysyłanie GETem to te dane wysyła się za pomocą URLA index.php?nazwa_zmiennej=wartosc

Cytat
To dlaczego mój skrypt nie działa?

Zazwyczaj każdy zabezpiecza się przed botami, takżę użyj liveHTTPHeaders żeby zobacz czego wymyga rapid
Pawel_W
ustaw w cURL referer, może to pomoże objeść rapida
R4D3K
albo : CURLOPT_FOLLOWLOCATION
Tylko zamiast myśleć skorzystaj z mojego sposobu ściągasz livehttpheaders i wchodzisz na rapida odpalasz plugin Narzędzia=>livehttpheaders zaznaczasz Capture i ściągasz dany zasób, czy co tam chcesz zrobić, i widzisz w oknie pluginu co zostało przesłane GETem,POSTem, czy jest przekierowanie jaki user agent, charset,refer i inne rzeczy.
Dalej chyba nie musze tlumaczyzc.
akurczyk
Już sobie z tym poradziłem. Zrobiłem literówkę, a curl nie wywalił żadnego błędu więc pomyślałem że to problem z rapidem. Mam jeszcze jeden problem, skrypt którego kod jest poniżej, wyświetla link do pliku, jednak jest on aktywny dopiero po 60 sekundach. Jak zrobić aby php odczekało te 60 sekund, zanim pobierze ten plik. Czy nie będzie wtedy jakiegoś problemu z maksymalnym czasem pobierania(przeglądarka,apache)/parsowania(php) strony??? Co do pobierania plików, to chciałem używć wgeta (ten skrypt ma automatycznie pobierać pliki z rapida na Linuksie).
  1. <?php
  2. $hand = curl_init();
  3. curl_setopt($hand, CURLOPT_URL, "http://rapidshare.com/files/180164458/Malcolm_In_The_Middle_-_1x01_-_Pilot.part1.rar");
  4. curl_setopt($hand, CURLOPT_RETURNTRANSFER, true);
  5. $output = curl_exec($hand);
  6. curl_close($hand);
  7. preg_match("/<form id=\"ff\" action=\"(.*)\" method=\"post\">/S", $output, $matches);
  8. $hand2 = curl_init();
  9. curl_setopt($hand2, CURLOPT_URL, $matches[1]);
  10. curl_setopt($hand2, CURLOPT_POST, true);
  11. curl_setopt($hand2, CURLOPT_POSTFIELDS, "dl.start=Free");
  12. curl_setopt($hand2, CURLOPT_RETURNTRANSFER, true);
  13. $output2 = curl_exec($hand2);
  14. curl_close($hand2);
  15. preg_match("/<form name=\"dlf\" action=\"(.*)\" method=\"post\">/S", $output2, $matches2);
  16. echo $matches2[1];
  17. ?>
erix
Cytat
Czy nie będzie wtedy jakiegoś problemu z maksymalnym czasem pobierania(przeglądarka,apache)/parsowania(php) strony?questionmark.gif

Czas operacji IO nie jest wliczany do czasu wykonywania skryptu. Z tego, co pamiętam, to czas żądań cURL też się do tego nie wlicza.

A jeśli chodzi o to - trzeba by było chyba zwiększyć limit czasu działania skryptu i sleep" title="Zobacz w manualu PHP" target="_manual odczekać.
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.