reklama
Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně

python - jak získat source webu (xxx.jsp) ?

petrofff (30)|9.7.2010 14:25
Konkrétně stránku:
http://sms.t-zones.cz/open.jsp
popř. http://sms.t-zones.cz/ (kdy response.status=301 a dojde k přesměrování)
[Python 2.5]
>>> import httplib2
>>> httplib2.debuglevel = 1
>>> http = httplib2.Http('.cache')
>>> url = "http://sms.t-zones.cz/open.jsp"
>>> response, content = http.request(url,headers={'cache-control':'no-cache'})

Obsah stránky (content) obsahuje místo text.řetězců symboly ve tvaru ???xxxxx???
NAPŘ.
zatímco ve zdrojovém kódu v prohlížeči je:


Odesílatel:

t-zones SMS



>>> print content[12941:][:100]


???sender.title???

???sender???



Možná že to souvisí s cookies,nevím...poraďte

Ladící výpis:
connect: (sms.t-zones.cz, 80)
send: 'GET /open.jsp HTTP/1.1\r\nHost: sms.t-zones.cz\r\nuser-agent: Python-httplib2/$Rev$\r\naccept-encoding: deflate, gzip\r\ncache-control: no-cache\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
header: Date: Fri, 09 Jul 2010 11:09:53 GMT
header: Server: Apache/2.2.3 (Debian) mod_jk/1.2.18
header: Set-Cookie: gPcookie=1;Max-Age=1000000000;Path=/;Version=1
header: X-Powered-By: Servlet 2.4; JBoss-4.2.2.GA (build: SVNTag=JBoss_4_2_2_GA date=200710221139)/Tomcat-5.5
header: Expires: Thu, 01 Jan 1970 00:00:00 GMT
header: Pragma: no-cache
header: Cache-Control: no-cache
header: Content-Type: text/html;charset=utf-8
header: Via: 1.1 sms.t-zones.cz
header: Set-Cookie: JSESSIONID=5E3E2CFF95D685CB0E1213885C97A02B.inst07; Path=/
header: Vary: User-Agent,Accept-Encoding
header: Content-Encoding: gzip
header: Connection: close
header: Transfer-Encoding: chunked
>>> response
{'status': '200', 'content-length': '26761', 'via': '1.1 sms.t-zones.cz', 'content-location': 'http://sms.t-zones.cz/open.jsp', 'transfer-encoding': 'chunked', 'set-cookie': 'gPcookie=1;Max-Age=1000000000;Path=/;Version=1, JSESSIONID=5E3E2CFF95D685CB0E1213885C97A02B.inst07; Path=/', 'expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'vary': 'User-Agent,Accept-Encoding', 'server': 'Apache/2.2.3 (Debian) mod_jk/1.2.18', 'connection': 'close', '-content-encoding': 'gzip', 'pragma': 'no-cache', 'cache-control': 'no-cache', 'date': 'Fri, 09 Jul 2010 11:09:53 GMT', 'x-powered-by': 'Servlet 2.4; JBoss-4.2.2.GA (build: SVNTag=JBoss_4_2_2_GA date=200710221139)/Tomcat-5.5', 'content-type': 'text/html;charset=utf-8'}
>>> content
'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\n\n\n\n\n???open.title???\n****** **********="Content-Type" **********text/html; charset=utf-8" />\n****** **********="Content-Script-Type" **********text/javascript" />\n****** **********="Content-Style-Type" **********text/css" />\n\n ....atd
Logout (4018)|9.7.2010 14:30
Pokud je tomu tak opravdu, pak zřejmě na těch stránkách je použitej javaskript k nějakejm překladům. Zkus použít wget na získání textu tý stránky, co ti vrátí....
petrofff (30)|9.7.2010 16:13
Schválně jsem javascript v browseru vypnul a na výsledek to nemá vliv (nefungují jen takové věci jako automatický doplňovač zadávaných slov nebo nejsou počítány znaky zapisované do textarea.
Odesílací formulář funguje bez javascriptu, ale pro mě je to další záhada, že pokud korektně sestavím formulářová data a pak je zkusím POSTnout, nedaří se (narozdíl např. od brány http://www.vodafonesms.cz kde to funguje)

Ukázka z wgetu (vypnuté všechny http volby) => totéž co v Pythonu:

???open.title???



  • ???open.title???





???open.title???












Je fakt, že to nechápu...
Povypínal jsem v browseru vše co se dá (JS,cookies,styly,info o předchozí stránce,javu,zásuv.moduly)
Výsledek:
Nelze odesílat form, ale text (bez stylů) je normální.
----------

SMS gateway

Error

Phone number

Sender:
t-zones SMS

Send message: normal screen only

-----<Česká verze>------

Poslat SMS

Chyba

Telefonní číslo

Odesílatel:
t-zones SMS

Zprávu poslat jako: běžnou SMS SMS na display
petrofff (30)|11.7.2010 11:28

Zjistil jsem,že stačí přidat jazyk:
Headers = {
'Accept-Language':'cs,en-us;q=0.7,en;q=0.3',
'cache-control':'no-cache'
}
response, content = http.request(url,headers=Headers)

content OK ( = source CS verze webu )

PS.
Ve skutečnosti HTTP request obsahuje navíc headers:
'Accept-Encoding':'gzip,deflate'
'User-Agent': 'Python-httplib2/$Rev$'
které dodá Python při provedení metody http.request

Když jsem chtěl (pro ověření) pomocí přesně stejných parametrů použít k downloadu program wget, očekávaný výsledek se nedostavil.
Příkazový řádek:
wget -U Python-httplib2/$Rev$ --header='Accept-Encoding:gzip,deflate' --header='Accept-Language:cs,en-us;q=0.7,en;q=0.3' -C off http://sms.t-zones.cz/open.jsp

Poznámka: podle manuálu je správný tvar: --header='Accept-Encoding: gzip,deflate'
Ale ten mi wget vyhodnotí jako cíl => http://gzip,deflate