Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] aktualizator cen z hurtowni
Forum PHP.pl > Forum > PHP
clp
Witam

Pisze program, który ma aktualizować ceny w sklepie pobierając je z hurtowni. Tyle wstępu.
Po w miare łatwym zrobieniu hurtowni ab.pl i abcdata.com.pl rozwaliła mnie hurtownia incom.pl ...
Chodzi o to, że :
  1. <?php
  2. $sajt="http://online.incom.pl/NBWeb/Login.aspx";
  3. login_on(GetUrlOnline($sajt));
  4. ?>

najpierw laczy sie i pobiera sobie jakas tam zmienna potem sie loguje uzupelnia ciastko i wszystko jest super

$sajt='http://online.incom.pl/NBWeb/Main.aspx';
// taka strone pobierze
$sajt='http://online.incom.pl/NBWeb/Produkty/CennikProd.aspx';
// taka tez

$sajt='http://online.incom.pl/NBWeb/Produkty/TowaryG.aspx?producent=58&typ=1';
$sajt='http://online.incom.pl/NBWeb/Produkty/CennikGrupy.aspx?kod=203934';
$sajt='http://online.incom.pl/NBWeb/Produkty/TowaryG.aspx?producent=203934&grupa=2234';
// a takich za chuja (za przeproszeniem) wyrzuca mnie i pisze mi ze invalid session i resetuje mi ciastko z authem
  1. <?php
  2. $dane=GetUrlOnline($sajt);
  3. echo $dane;
  4. // tak pobieram
  5. ?>


Jak by ktoś miał blade pojecie o co może chodzić to bym dzwięczał do końca życia winksmiley.jpg
Aha ta ichnia aplikacja to jakies asp.net

a tu moje funkcje które to robią
  1. <?php
  2. function login_on($dane){
  3. $pat1='!<input type="hidden" name="__VIEWSTATE" value="(.+?)" />!is';
  4. preg_match($pat1,$dane,$viewstate);
  5. $data['post']['__VIEWSTATE']=$viewstate[1];
  6. $data['post']['txtLogin']='xxxxxxxxx';
  7. $data['post']['txtPassword']='xxxxxxx';
  8. $data['post']['ButtonLogin']='Zaloguj się';
  9. $sajt="http://online.incom.pl/NBWeb/Login.aspx";
  10. return GetUrlOnline($sajt,$data);
  11. }
  12. function GetUrlOnline($url,$data=FALSE){
  13. $cookie_file_path='/path/tu/ciasto/ciasto';
  14. $c=curl_init();
  15. curl_setopt($c, CURLOPT_URL, $url);
  16. if (is_array($data['post'])){
  17. curl_setopt($c, CURLOPT_POST, 1);
  18. curl_setopt($c, CURLOPT_POSTFIELDS, createPostString($data['post']));
  19. }else {
  20. curl_setopt($c,CURLOPT_HTTPGET,1);
  21. }
  22. curl_setopt($c, CURLOPT_HEADER, 1);
  23. $ua= 'Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3';
  24. curl_setopt($c, CURLOPT_USERAGENT,$ua);
  25. // curl_setopt($c, CURLOPT_REFERER, $url);
  26. curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
  27. curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
  28. curl_setopt($c, CURLOPT_COOKIEFILE, $cookie_file_path);
  29. curl_setopt($c, CURLOPT_COOKIEJAR, $cookie_file_path);
  30. $dejta=curl_exec($c);
  31. curl_close($c);
  32. return $dejta;
  33. }
  34. function createPostString($aPostFields) {
  35. foreach ($aPostFields as $key => $value) {
  36. $aPostFields[$key] = urlencode($key) . '=' . urlencode($value);
  37. }
  38. return implode('&', $aPostFields);
  39. }
  40. ?>
Luke_Star
z tym cistkiem wydaje sie jest cos nie tak, wyglada to troche tak jakby po zalogowaniu nie było juz czytane. Bo po zalogowaniu zdaje sie ze skrypt zostaje wykonany i tak trzyma w pamieci, a po odswiezeniu lub zienieniu adresu, strona nie potrafo odczytac cookies'a który ma w sobie sid'a, wiec zostajesz rozpoznany jako niezalogowany.
clp
No ale co ciastko nie działa przy adresach z zmiennymi GET? Jakoś tak bez sensu.
Btw. łącząc sie linksem/firefox(bez js żeby nie było) da sie wszędzie wejść i wszystko działa
Luke_Star
Bo chodzi chyba o to ze przegladarka jako0 taka potem wysyła zawartość swojego ciastka na komputerze lokalnym, a w tym wypadku kod tej hurtowni nie potrafi go zlokalizowac. Oczywiście moze byc inaczej, nie twierdze z etak jest. Poprostu tak mi sie wydaje, dobrze żeby tez inni zabrali głos bo ja sie guru nie czuje.
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.