Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] cURL i POST raz jeszcze, pomoc z szczególnym przypadku
seph84
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 9.07.2008

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


 Witam!

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;
?>

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;
?>

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? sadsmiley02.gif

Ten post edytował seph84 17.07.2008, 13:38:33
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
versis
post
Post #2





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 11.07.2008

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


Nie wiem czy o to chodzi, ale mi działa. Jakby co to pisz smile.gif

Kod
<?php

define('UA', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.8) Gecko/20071008 Firefox/2.0.0.8');
header('Content-Type: text/plain; charset=iso-8859-2');


$url2 = "http://konta.nettur.pl/192133/index?Act=show_doc&id_doc=1318&id_b=12237&id_term=976&DtDate=2008-07-12&NoLength=15";
$cookie_file_path = "cookie.txt"; 

$ch = curl_init($url2);                          
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,$url2);
$r = curl_exec($ch);
curl_close($ch);
echo $r;

?>


Ten post edytował versis 11.07.2008, 17:54:04
Go to the top of the page
+Quote Post
rycy85
post
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 16.07.2008

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


Hi all:)
jestem nowy tu więc ładnie witam się ze wszystkimi;)

a teraz do rzeczy:

Versis...
to co Ty zrobiłeś to już żaden problem, bo znalazłeś ofertę z podanego adresu. Szybciej to można zrobić bez cookie i też działa:
Kod
$c = curl_init();
  curl_setopt($c, CURLOPT_URL, "http://domain.pl/xxxxxx/index?Act=show_doc&id_doc=1318&id_b=12237&id_term=976&DtDate=2008-07-12&NoLength=15");
  curl_setopt($c, CURLOPT_RETURNTRANSFER, 0);
  $result = curl_exec($c);
  curl_close($c);

Zabawa się zaczyna dopiero gdy chcesz wyszukać coś u nich:)
Widać, że dane z form są wysyłane do index.rst.
Mój kod:
Kod
$query = "country=".$country."&month=".$month."&day=".$day."&dojazd=".$dojazd."&month_to=".$month_to."&day_to=".$day_to."&type=".$type."&price_select=".$price_select."&only_lm=".$only_lm."&only_fm=".$only_fm;
  $c = curl_init();
  $cookie = 'Ack=' . urlencode('find_trip') . '&find_sess=' . urlencode('1302332414');
  curl_setopt($c, CURLOPT_URL, "http://domain.pl/xxxxxx/index.rst");
  curl_setopt($c, CURLOPT_HEADER, 1);
  curl_setopt($c, CURLOPT_COOKIE, $cookie);
  curl_setopt($c, CURL_POST, 1);
  curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);// allow redirects
  curl_setopt($c, CURLOPT_POSTFIELDS, $query);
  curl_setopt($c, CURLOPT_RETURNTRANSFER, 0);
  curl_close($c);

niestety już nie działa;/ nie działa również bez cookie, z urlencode() - próbowane na różne sposoby.
może jakieś rady/wskazówki?

Seph84...

Wydaje mi się że tu ten script js, o którym mówisz (jeśli masz na myśli ten odpowiedzialny za miesiące i dni) nie ma nic do tego. Bo i tak dane są wysyłane w dość prostej formie.
Do czego ciekawego się dokopałeś w związku z tym netturem? może ze wspólnych wypocin da się coś wykombinować, żeby to ruszyć...

jakieś sugestie?

Pozdrawiam,
rycy

Ten post edytował rycy85 17.07.2008, 13:53:07
Go to the top of the page
+Quote Post
seph84
post
Post #4





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 9.07.2008

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


Tak, dane z formularza są wysyłane do index.rst. Dodatkowo zauważ, że formularz ma kilka ukrytych pól. Z tym JS to chodziło mi o przycisk submit:
Kod
<input type=image src='http://konta.nettur.pl/10541/gfx/btn_szukaj.gif' onclick='javascript:main_finder.submit()'>

Wiem, że używając cURLa się go omija, ale może właśnie w tym jest problem, bo on coś tam generuje na kliknięciu?

Ja się już wystrzelałem z pomysłów przy tym problemie niestety. Nie wiem już z jakiej strony to próbować ugryżć. dry.gif
Go to the top of the page
+Quote Post
rycy85
post
Post #5





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 16.07.2008

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


dobra, udało się:)

mój błąd - nie zauważyłem, że przy submit był javascript - dzięki seph84 za dobrą wskazówkę:)

Ten post edytował rycy85 17.07.2008, 13:53:48
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 Aktualny czas: 19.08.2025 - 19:39