Zaczynam zabawę z cURL'em i jak to bywa na początku, nadziałem się na kilka problemów. Pierwszą rzeczą, jaką chcę opanować, to zasysanie wybranego przeze mnie contentu z serwisów. Dla przykładu znalazłem gotowca wypytującego Amazon o książki o tematyce PHP i MYSQL:
Kod
<?php
$url = "http://www.amazon.com/exec/obidos/search-handle-form/002-5640957-2809605";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "url=index%3Dbooks&field-keywords=PHP+MYSQL");
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
$url = "http://www.amazon.com/exec/obidos/search-handle-form/002-5640957-2809605";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "url=index%3Dbooks&field-keywords=PHP+MYSQL");
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
I po jego przestudiowaniu napisałem własny skrypt(oczywiście wzorując się, jednak poszukiwania właściwych danych i parametrów prowadziłem sam):
Kod
<?php
$url = "http://www.amazon.com/s/ref=nb_ss_gw";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 11);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "url=search-alias=stripbooks&field-keywords=PHP+MYSQL");
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
$url = "http://www.amazon.com/s/ref=nb_ss_gw";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 11);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "url=search-alias=stripbooks&field-keywords=PHP+MYSQL");
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
Różnice. URL - ja swój wyczytałem z akcji formularza, zielonego pojęcia nie mam, skąd autor skryptu wytrzasnął swój. Zwiększyłem limit czasu, gdyż moje łącze nie jest kosmiczne, a i Amazon nie śmiga jakoś niesamowicie. POSTFIELDSY również znalazłem w formularzu, oraz dodatkowo w url-u po wpisaniu wyszukiwania ręcznie. Wtedy do mnie dotarło, sprawdziłem i zbaraniałem - formularz w Amazonie przekazuje dane GETem. A obie wersje skryptów działają. Ciekawe, czy gdyby przekazywał POSTem, to by śmigały.
Pytanie skąd biorą się różnice w naszych skryptach? Jak autor oryginału znalazł swoje dane? Jakieś pomysły?
No i gwóźdź programu. Postanowiłem tę samą metodę wykorzystać do innej stronki -
Kod
http://konta.nettur.pl
, ale tutaj nie radzę sobie. Zawsze dostaję tylko stronę główną. Jeśli ktoś mógłby mi pomóc z poprawnym URL i POSTFIELDSAMI, będę niezmiernie wdzięczny. Sprawę komplikuje niesamowicie rozbudowany formularz, korzystający z JS... no albo ja jak zwyklę coś źle robię. Help? 