[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