Chciałem sobie napisać skrypt monitorujący paczki w UPS, i wszystko pięknie ładnie tylko chcę dostać się do dokładnego przebiegu paczki:
http://www.ups.com/WebTracking/processInpu...2&tracknum=1Z7E888X6843433273&AgreeToTermsAndConditions=yes
To strona główna statusu gdzie to co pogrubione wczytuje ze zmiennej jak nr paczki.
I teraz na dole mamy "Pokaż przebieg paczki" gdzie przekierowuje nas do: http://wwwapps.ups.com/WebTracking/detail
I postem przesyła dane z pola hidden formularza i kilka dodatkowych informacji.
Skrypt który napisałem łączy się najpierw z pierwszą stroną aby pobrać sobie pole hidden formularza następnie łączy z drugą stroną i podaje w POST to co trzeba lecz nagłówek jaki mi wraca to 500 - internal server error. Z tego co sprawdzałem taki sam nagłówek wraca jeśli wejdziemy na stronę http://wwwapps.ups.com/WebTracking/detail w przeglądarce gdzie w POST nic nie leci.
Oto skrypt:
$nr_pack="1Z7E888X6843433273"; $url = "http://www.ups.com/WebTracking/processInputRequest?HTMLVersion=5.0&loc=pl_PL&Requester=UPSWidget2&tracknum=".$nr_pack."&AgreeToTermsAndConditions=yes"; $link = curl_init($url); curl_setopt($link, CURLOPT_REFERER, 'http://www.ups.com/'); curl_setopt($link, CURLOPT_HEADER, true); curl_setopt($link, CURLOPT_RETURNTRANSFER, true); curl_setopt($link, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3'); $wynik = curl_exec($link); curl_close($link); //pobieramy pole hidden z formularza i zapisujemy do zmiennej //zmienna w ktorej znajduje sie pole hidden formularza $hidden= $czescc[0]; $urldwa = "http://wwwapps.ups.com/WebTracking/detail"; $drugi = curl_init($urldwa); curl_setopt($drugi, CURLOPT_REFERER, 'http://www.ups.com/WebTracking/processInputRequest?HTMLVersion=5.0&loc=pl_PL&Requester=UPSWidget2&tracknum=1Z7E888X6843433273&AgreeToTermsAndConditions=yes'); curl_setopt($drugi, CURLOPT_HEADER, true); curl_setopt($drugi, CURLOPT_RETURNTRANSFER, true); curl_setopt($drugi, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3'); curl_setopt($drugi, CURLOPT_POSTFILEDS, 'loc=pl_PL&datakey=line1&progressIsLoaded=N&shipmentsAreLoaded=N&showPkgProgress=false&showAsscShipments=false&HIDDEN_FIELD_SESSION='.$hidden.'&showSpPkgProg=Poka%C5%BC+przebieg+paczki'); $wynikdwa = curl_exec($drugi); curl_close($drugi); echo $wynikdwa
Używam livehttpheaders kombinuje już na wszystkie możliwe sposoby od kilku godzin i ciągle mi to nie działa.
Co ważne jeszcze zauważyłem że przy drugim curlu jak jest bład 500 ustawiane są na nowo ciastka czyli tak jakby nie widziało ciastek z pierwszego curla