[python] získání dat formuláře z HTML source ; odeslání dat (POST)
petrofF
petr0ff na seznam.cz
Neděle Červen 13 09:37:49 CEST 2010
Pokouším se o jednoúčelovou utilitu pro zautomatizování odesílání
SMSek (bez použití browseru).
[bezproblémová je část realizující: výběr uživatele -> tel.číslo ->
určení jedné ze tří URL (mobil.operátor) + INPUT textu zprávy ->
rozdělení do bloků o max.délce dílčí zprávy]
PROBLÉM = odeslání zprávy:
A. Načtení stránky s formulářem:
>>> import httplib2
>>> h = httplib2.Http('.cache'); response, content = h.request("http://www.vodafonesms.cz/",headers={'cache-control':'no-cache'})
>>> print response
{'status': '200', 'content-location': 'http://www.vodafonesms.cz/',
'transfer-encoding': 'chunked', 'set-cookie':
'public_sms_gw=c4d0dc3f61c7a3b8dbae8d2c2c009f35; expires=Sun, 13-
Jun-2010 05:55:27 GMT, SMS_Internet=2325827033.20480.0000;
expires=Sun, 13-Jun-2010 06:15:27 GMT; path=/', 'server': 'Apache',
'connection': 'close', 'x-pad': 'avoid browser bug', 'date': 'Sun, 13
Jun 2010 05:45:27 GMT', 'content-type': 'text/html; charset=utf-8'}
***[debugging=1]*************************
connect: (www.vodafonesms.cz, 80)
send: 'GET / HTTP/1.1\r\nHost: www.vodafonesms.cz\r\naccept-encoding:
deflate, gzip\r\nuser-agent: Python-httplib2/$Rev$\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
header: Date: Sat, 12 Jun 2010 07:30:51 GMT
header: Server: Apache
header: Set-Cookie: public_sms_gw=c4d0dc3f61c7a3b8dbae8d2c2c009f35;
expires=Sun, 13-Jun-2010 05:55:27 GMT
header: Connection: close
header: Transfer-Encoding: chunked
header: Content-Type: text/html; charset=utf-8
header: X-Pad: avoid browser bug
header: Set-Cookie: SMS_Internet=2325827033.20480.0000; expires=Sun,
13-Jun-2010 06:15:27 GMT; path=/
******************************************
Jak ze zdrojového textu ( = content ) získat seznam parametrů + hodnot
formuláře ? (ve standardní knihovně jsem vhodný modul nenašel)
B. Odeslání POST requestu s daty
Zde si nejsem jistý, který header Set-Cookie použít (jsou dva)
Díky předem za jakékoli vodítko
----------------------------------------------
PS.
Adresa obrázku s pictogramem se dá načíst z cookies:
url_img = 'http://www.vodafonesms.cz/imgcode.php?id=' + response['set-
cookie'].split(';')[0].split('=')[1]
>>> print url_img
http://www.vodafonesms.cz/imgcode.php?id=c4d0dc3f61c7a3b8dbae8d2c2c009f35
Formulář (ve zjednodušeném tvaru) vypadá takto:
<form action="send.php" id="smsform" name="smsform" method="post"
onsubmit="return check_form(this);">
<input type="hidden" name="imgid"
value="c4d0dc3f61c7a3b8dbae8d2c2c009f35" />
<input type="hidden" name="ppp"
value="127606918313631:eccb8602ee4631b864eab79b422d6814" />
<input type="hidden" name="locale" value="cz" />
<p>
<label for="number">Telefonní číslo příjemce *</
label><br />
<span class="prenum">+420</span>
<input type="text" name="number" id="number"
tabindex="1" maxlength="9" value="" />
</p>
<p>
<label for="mynumber">Vaše telefonní číslo</label><br />
<span class="prenum">+420</span>
<input type="text" name="mynumber" id="mynumber"
tabindex="2" maxlength="9" value=""
onkeyup="counterchar(document.smsform);" />
</p>
<p>
<label for="sender">Vaše jméno</label><br />
<input type="text" name="sender" id="sender"
tabindex="3" class="big" maxlength="30" value=""
onkeyup="counterchar(document.smsform);" />
</p>
* Povinné položky.
<p class="marginbottom0">
<label for="message">ZPRÁVA (bez diakritiky) *</
label>
</p>
<div id="messageArea" name="messageArea"
class="messageArea" >
<div id="tt" class="adWrapper2" style="word-wrap:break-
word;">
<textarea class="textarea" name="message"
id="message" tabindex="4" rows="3" cols="87" wrap="hard"
onkeyup="counterchar(document.smsform);"></textarea><br />
</div>
</div>
<div id="js" class="js">
<p>
Napsáno je <input name="char_in" value=""
readonly="readonly" /> a zbývá <input name="char_le" value=""
readonly="readonly" /> znaků.
<br />
Zpráva bude rozdělena do<input name="parts" value=""
readonly="readonly" />SMS.
</p>
</div>
<img src="imgcode.php?id=c4d0dc3f61c7a3b8dbae8d2c2c009f35"
alt="Číselný kód" />
<div class="sb">
<label for="pictogram">Opište řadu čísel, potom klikněte
na Odeslat!</label>
</div>
<input type="text" name="pictogram" id="pictogram"
class="marginbottom10" tabindex="5" autocomplete="off" maxlength="5" /
>
<a class="sub_red" onmouseover="this.className =
'sub_red_on';" onmouseout="this.className = 'sub_red';"><span> </
span><input name="send" tabindex="6" value="Odeslat!"
class="button_red" type="submit" onmouseover="this.className =
'button_red_on';" onmouseout="this.className = 'button_red';" /></a>
</div>
</div>
</div>
<div class="modFooter"><hr /></div>
</div>
<!-- END of Step 3 -->
<div class="cleaner"></div>
<!-- * Povinné položky.<br /><br /> -->
</form>
Další informace o konferenci Python