[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&nbsp;*</
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>
            &nbsp; * Povinné položky.
            <p class="marginbottom0">
              <label for="message">ZPRÁVA (bez diakritiky)&nbsp;*</
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>&nbsp;</
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>

   <!--   &nbsp; * Povinné položky.<br /><br /> -->
    </form>


Další informace o konferenci Python