| Pracuju na projektu, ktery by mel zvladat odesilat a prijimat http hlavicky, proste by mel castecne simulovat prohlizec. K tomuto pouzivam podobnou konstrukci:
$socket=fsockopen("seznam.cz", 80, $errno, $errstr);
fwrite($socket, $pozadavek);
$odpoved=fpassthru($socket);
az sem vse krasne funguje a $odpoved dal zpracovavam, ale dal na jeji zaklade pak volam dalsi pozadavek:
fwrite($socket, $pozadavek2);
$odpoved2=fpassthru($socket);
tady vznika problem kdy je $odpoved2 prazdna, jako by druhy pozadavek nebyl ani odeslan
problem se da resit tak ze pro kazdy pozadavek otevru novy socket, potom uz vse funguje, ale zajimalo by me jestli to neni zbytecne.
Ve vsech navodech s podobnou tematikou co jsem nasel se jako priklad uvadi jen odeslani jednoho pozadavku a nikde neni popsano, jestli je potreba otevrit novy socket, nebo se da treba ten jiz pouzity nejak "resetovat"
----------
The most important thing in communication is to hear what isn't being said.... (odpovědět) | Gerlige | | 293165008 | 5.8.2008 19:29 |
|
|
|
| Nezapomen jakej je HTTP protokol. Tam plati ze po kazdem odeslani/prijimani dat se spojeni ukonci a proto aby jsi mohl poslat dalsi pozadavek musis znovu toto spojeni navazat. Jinak precti si neco o TCP.
Tedy u tebe (pokud jsem to spravne pochopil):
funkce GetData(server, http_pozadavek, odpoved)
pripoj(server)
odesli(http_pozadavek)
prijmi(odpoved)
spojeni_konec
GetData(www.seznam.cz, HTTP-HLAVICKA, *odpoved)
zpracuj(odpoved)
GetData(www.seznam.cz, HTTP-HLAVICKA2, *odpoved)
atd atd... sry je to pseudo kod, ale snad pochopitelnej....
----------
Když nejde o život, tak o hovno de...
Charles Bukowski - kdo zna, ten vi :) (odpovědět) | |
|
|
| 1. a proto mame http 1.1
2. co s tim ma co delat tcp?
(odpovědět) | prc | 213.211.51.* | 6.8.2008 18:38 |
|
|
|
| jo chapu, o tom, ze je http bezstavovy protokol vim, ale ve verzi http/1.1 by melo dojit k uzavreni spojeni az po odeslani hlavicky ukoncujici prenos (Connection: close), ale nevsiml jsem si, ze ji server odesila pokazde, proste jsem ji prehledl, tak jsem si myslel ze je chyba jinde
----------
The most important thing in communication is to hear what isn't being said.... (odpovědět) | Gerlige | | 293165008 | 6.8.2008 13:00 |
|
|
|
| Pro vice dotazu v jednom spojeni je Connection: Keep-Alive. Ale i tak musis pocitat s tim, ze se to muze zavrit, kdyz na to server kasle, nebo ma limit dotazu v jednom spojeni, atd.
(odpovědět) | prc | 213.211.51.* | 6.8.2008 18:41 |
|
|
|
| presne jak rika prc, od toho existuje hodnota Keep-Alive, ale spolehat na to, ze ji bude server akceptovat, je hloupost a v praxi se to tak nedela. (odpovědět) | Emkei | | | | 6.8.2008 20:14 |
|
|
|
| $conn=fsockopen('seznam.cz',80);
fputs($conn,"GET / HTTP/1.1\r\nHost:seznam.cz\r\n\r\n");
while(!feof($conn))
echo fread($conn,128);
Jenom zaklad/princip.
Mam na stejnym principu bota a jede perfektne... (odpovědět) | |
|
|
| Pro upresneni : je to bot, co se prihlasuje na SimpleMachinesForum a muze delat vse co ostatni uzivatele (odpovědět) | |
|
|