Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]cURL,
Forum PHP.pl > Forum > Przedszkole
Gacek89
Witam,
Mam taki probem.
Chciał bym wysłać zapytanie do servwra ale nie czekac na jego odpowedz bo jest mi zbedna a czekanie na nia zabiera mi zaduzo czasu.
Chyba mozna to zrealizować dzieki interfejsowi multi ale jakoś go nieokumłem do konca.
mógł by ktoś taki przykładowy kod napisac laczenia sie z serwerem bez czekania na odbiór danych?
goped
Po co laczyc sie z serwerem jesli nic od niego nie chcesz?
Gacek89
np wysłac mu informacje metada GET lub POST
Kicok
Użyj fsockopen" title="Zobacz w manualu PHP" target="_manual, fwrite" title="Zobacz w manualu PHP" target="_manual, fclose" title="Zobacz w manualu PHP" target="_manual.

Połącz się z serwerem na porcie 80, wyślij mu takie nagłówki:
Kod
GET /some_dir/some_file.php?some_parameters=abcde HTTP/1.1
Host: some_server.com
Connection: close

(Międzi każdą linijką 1x\n, na końcu 2x\n)

i od razu się rozłącz.
Gacek89
dzieki, ale jeszcze powec mi jak wysłać zmienne POST i cookis
jak bys mógł to napisz tak(albo ktos inny) dla przykładu połczenie podobne do tego.

[php]
<?

$ch = curl_init ('http://www.costam.pl/');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies.txt');
curl_setopt($ch, CURL_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'login=costam&pass=costam');
curl_exec($ch);
curl_close($ch);
?>
bardziej mi zalezy na ciastakch
Kicok
POST
http://www.jmarshall.com/easy/http/#postmethod
http://www.haxite.org/index.php3?site=foru...467&start=0 - przeczytaj koniecznie ostatni post w tym temacie, żebyś potem bzdur nie pisał.

Ciasteczka
http://pl.wikipedia.org/wiki/Ciasteczka_(i...2.C3.B3wka_HTTP


Najlepiej będzie, jak przy pomocy jakiegoś narzędzia do podsłuchiwania nagłówków (np. LiveHTTPHeader - plugin do FireFoxa) będziesz podglądał, jakie informacje przesyła do serwera przeglądarka. Potem już tylko zostaje naśladować zachowanie przeglądarki w PHP.
Gacek89
dziei troche poszprałem i teraz studjuje wymine pakietów.
i doszłe do kropki poniewaz niewiem jak wysłac ciastka
przegldarka normalnie wysyła najpierw zapytanie po tem odbiera takie coś:
Kod
Transmission Control Protocol, Src Port: http (80), Dst Port: wv-csp-sms (3590), Seq: 1, Ack: 319, Len: 0

i potem wysyła Ciastka
jak ja robie połczenie i wysłam wszytko razem to Cistaka sią ignorowane.
jak mam wysłac Cistka?
Kicok
Kod
Cookie: ciacho1_nazwa=ciacho1_wartość; ciacho2_nazwa=ciacho2_wartość; ciachoN_nazwa=chachoN_wartość

Na końcu oczywiście 1x\n jak w przypadku pozostałych nagłówków. A wartości ciasteczek portaktuj najpierw funkcją rawurlencode" title="Zobacz w manualu PHP" target="_manual


Oczywiście nie możesz też wysyłać ciasteczek jak popadnie. Zachowuj się tak jak przeglądarka, czyli:
1. Wysyłasz żądanie pobrania strony. Nie wysyłasz jeszcze żadnego ciacha.
2. Serwer odpowiada. Z nagłówków wyciągasz wszystkie wystąpienia Set-Cookie:. Odczytujesz z nich nazwy ciastek i wartości. Wartości będą już zakodowane, więc nie musisz ponownie używać rawurlencode
3. Wysyłasz kolejne żądanie pobrania strony. Tym razem umieszczasz już nagłówki Cookie: a w nich wszystkie nazwy i wartości ciach odczytanych z pkt. 2
Gacek89
Cytat
swoich wrtości Cistaek niepodaje, poprostu chce zrealizować połczenie identyko jak przegldarka i kopjuje odczytane z przechwycenia wrtosci. ale  tym pakiecie co pobieram do servera nic niema!!! w nagłowku pisze

Kod
10    0.067179000    77.79.219.2    87.207.10.102    TCP    http > wv-csp-sms [ACK] Seq=1 Ack=319 Win=8192 Len=0


ponim zaraz jest
Kod
11    0.067236000    87.207.10.102    77.79.219.2    HTTP    Continuation or non-HTTP traffic
i wysyła w nim Ciastka

jak pobiore po wysłaniu tego 1 pakietu to wyskauje mi gotowa strona

PS.wszytko zakonczone /r/n i tak samo to kopjuje

PS. czym pobrać strone bo pobieram petla
  1. <?php
  2.  
  3. while (!feof($fp)) {
  4.  
  5. echo fgets($fp, 128);
  6.  
  7. }
  8.  
  9. ?>
i albo strasznie długo cała pobiera albo ma nieskczona pentle bo wykonywanie skryptu trwa ponad 30 s



doszłem do wnisku ze to niema sesu bo zeby serwer zaliczył to jako pobranie strony i uruchomił skrypt musze pobrać przynajmniej jedna linijke....

moze lepiej bedzie jak ktos mi na przykładzie(prostym) przedstawi jak sie połczyć np do 10 hostów za pomoca curl_multi, bo w artykuje jak to było ropisane w klasach to jakoś sie niepołapałem zbytnio
Kicok
Nie wiem czego używasz do podsłuchiwania pakietów, ale wyświetla informację na zbyt niskim poziomie ( na poziomie protokołu TCP/IP ) i nic mi to nie mówi.


Cytat
doszłem do wnisku ze to niema sesu bo zeby serwer zaliczył to jako pobranie strony i uruchomił skrypt musze pobrać przynajmniej jedna linijke....

Nie. Jeśli uda ci się wysłać żądanie, to będzie to już zliczone jako "pobranie strony". Nie musisz odbierać żadnej linijki tekstu.
Pobranie danych zwracanych przez serwer będzie ci tylko potrzebne do sprawdzenia, czy twój skrypt aby na pewno działa prawidłowo. Później możesz ta część kodu wykomentować.


Cytat
i albo strasznie długo cała pobiera albo ma nieskczona pentle bo wykonywanie skryptu trwa ponad 30 s

1. Upewnij sie, że wysyłasz nagłówek Connection: Close
2. stream_set_timeout" title="Zobacz w manualu PHP" target="_manual



PS. http://77.79.219.2/ - niedawno na forum przewijał się już temat o pobieraniu danych z fotka.pl - poszukaj sobie, może potrzebujesz czegoś podobnego.
Gacek89
dałem tylko sam nagłówek, wyśwetla mi mniejwecej takie coś
Kod
GET /profil/asasaa17/ HTTP/1.1
User-Agent: Opera/9.25 (Windows NT 5.1; U; pl)
Host: www.fotka.pl
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: pl-PL,pl;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
a to jeszcze niewszytko tongue.gif
sprawie Cistek rowiązałem loguje mi sie, ale jak usune funkcje fgets(); to nieozostje odnotowane ze dany profil odwedziłem. (moze cURL_multi bedize lepszy?? jak sadzisz?)
szukłem na forum ale nic konkretnego nienalazłem.
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.