witam

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:

  1. $nr_pack="1Z7E888X6843433273";
  2.  
  3. $url = "http://www.ups.com/WebTracking/processInputRequest?HTMLVersion=5.0&loc=pl_PL&Requester=UPSWidget2&tracknum=".$nr_pack."&AgreeToTermsAndConditions=yes";
  4. $link = curl_init($url);
  5. curl_setopt($link, CURLOPT_REFERER, 'http://www.ups.com/');
  6. curl_setopt($link, CURLOPT_HEADER, true);
  7. curl_setopt($link, CURLOPT_RETURNTRANSFER, true);
  8. curl_setopt($link, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies.txt');
  9. curl_setopt($link, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies.txt');
  10. 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');
  11. $wynik = curl_exec($link);
  12. curl_close($link);
  13.  
  14.  
  15. //pobieramy pole hidden z formularza i zapisujemy do zmiennej
  16. preg_match('/<form name=\"progressForm\"(.+?)<script/is',$wynik,$punkty);
  17. $czesc=explode('type="HIDDEN" value="', $punkty[1]);
  18. $nowe=trim($czesc[1]);
  19. $czescc=explode('">', $nowe);
  20. //zmienna w ktorej znajduje sie pole hidden formularza
  21. $hidden= $czescc[0];
  22.  
  23. $urldwa = "http://wwwapps.ups.com/WebTracking/detail";
  24. $drugi = curl_init($urldwa);
  25. curl_setopt($drugi, CURLOPT_REFERER, 'http://www.ups.com/WebTracking/processInputRequest?HTMLVersion=5.0&loc=pl_PL&Requester=UPSWidget2&tracknum=1Z7E888X6843433273&AgreeToTermsAndConditions=yes');
  26. curl_setopt($drugi, CURLOPT_HEADER, true);
  27. curl_setopt($drugi, CURLOPT_RETURNTRANSFER, true);
  28. curl_setopt($drugi, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies.txt');
  29. 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');
  30. 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');
  31. $wynikdwa = curl_exec($drugi);
  32. curl_close($drugi);
  33. 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