[python] sockety - problem s HTTP spojenim
Leos Pol
leos na radiante-corp.com
Čtvrtek Listopad 15 17:33:28 CET 2007
Mozna jste presne nepochopil muj priklad, tak ho trosku rozepisu.
Nejdrive si pripravim buffer, ktery bude obsahovat nakonec vysledek,
tzn. string obsahujici nactene hlavicky + celou html. Cyklim a pokud je
porad co cist, tak prectu maximalne 4k a pridavam to do vysledneho buf.
To znamena, ze vzdy prectu celou stranku. Jen se trosku opravim, protoze
tam mam trapnou chybku:
buf = ''
read = 'go'
while read:
read = clisock.recv(4096)
buf += read
print buf
Ohledne teorie vas odporucim treba na nasledujici linky:
http://cs.wikipedia.org/wiki/UDP
http://cs.wikipedia.org/wiki/TCP
Predstavte si, ze pisete jednoducheho clienta na prenos souboru. Je pro
vas samozrejme dulezite, aby vsechny odeslana data dosly a jeste k tomu
ve spravnem poradi. Proto pouzijete steam, ktery tyto problemy resi.
Datagram pak naopak pouzijete tam, kde toto nepotrebujete a ani vas to
nezajima - VoIP, DNS, broadcast.
Ale to je jen takovy nastrel, proto radeji vyhledejte nejake materialy
na internetu - vytecne veci se daji docist v prednaskovych materialech
univerzit :-)
Leo
BTW: kdysi davno jsem to taky zkousel a nepodarilo se mi apache donutit,
aby mi odpovidal v HTTP/1.0
Tomy novella wrote:
> ahoj,
> tak potom mam este jednu otazku. presnejsie dve :) totiz nedalo by sa
> to nejak tak spravit, aby mi zobrazo hocako velku stranku? nechcem
> robit obmedzenie na velkost stranky, pretoze co ak bude vacsia, ako je
> dane obmedzenie.. (naco je vlastne to obmedzenie dobre?;-(( ). este by
> ma zaujimalo, ze ci niekto nevie, ze ako to riesia webove browsre? oni
> maju nejake obmedzenie?
>
> aa ta "druha otazka" ;) sa tyka socketov, presnejsie
> kedy sa pouziva datagramove a kedy streamove spojenie? na nete som sa
> len dozvedel rozdiel medzi nimi, ale par prikladov pouzitia z praxi by
> nezaskodilo :)
>
>
> diky:)
>
> 2007/11/15, Leos Pol <leos na radiante-corp.com>:
>
>> Zdravim,
>>
>> v podstate vsechno dobre, jen ze socketu pak nactete jen 100B, takze
>> radek recv bych treba prepsal na tohle:
>>
>> buf = ''
>> read = clisock.recv(4096)
>> while read:
>> buf += read
>> read = clisock.recv(4096)
>> print buf
>>
>>
>> Leo
>>
>> Tomy novella wrote:
>>
>>> ahoj,
>>> ucim sa zaklady prace so socketmi, tak som si napisal takyto skriptik:
>>>
>>> import socket
>>> clisock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> clisock.connect(('ww1.chatq.sk', 80))
>>> clisock.send('GET /index.php HTTP/1.0\nHost: ww1.chatq.sk\n\n')
>>> print clisock.recv(100)
>>> clisock.close()
>>> print "koniec"
>>>
>>> problemom vsak je, ze ked ho spustim, tak mi vrati nieco taketo:
>>>
>>> HTTP/1.1 200 OK
>>> Date: Thu, 15 Nov 2007 15:04:15 GMT
>>> Server: Apache
>>> X-Powered-By: PHP/4.4.8_pre200
>>> koniec
>>>
>>> a ja pritom chcem, aby mi vratilo aj cely HTML kod, ktory by mal
>>> apache vraciat...
>>> preco ho nevracia a vracia mi spat len par hlaviciek?
>>>
>>> aa ako ceresnicka by ma zaujimalo, ze preco ked to pytam cez HTTP
>>> verziu 1.0, tak mi to vracia cez HTTP 1.1 :)
>>>
>>> diky :)
>>>
>>>
>>>
>> --
>> ----
>> Leos Pol
>> Team Leader
>> Radiante Corp.
>>
>> If it can be imagined,
>> we can implement it
>>
>> _______________________________________________
>> Python mailing list
>> Python na py.cz
>> http://www.py.cz/mailman/listinfo/python
>>
>>
>
>
>
--
----
Leos Pol
Team Leader
Radiante Corp.
If it can be imagined,
we can implement it
Další informace o konferenci Python