網頁

2010年2月16日 星期二

以 POST Method 發布訊息

機器人收進訊息之後我們期望它能做出一些回應,其中 Post Method 是網路上常見的發表訊息的方法可將網頁上的表格回傳至伺服器端。

以下提供一個簡單的網頁做示範 post.php

<html>
 <head>
 </head>
 <body>
  <?php if ($_POST) {echo "<p>Hi ".$_POST[Name]." !</p>";} ?>
  <form id="Post_DEMO" name="Form_DEMO" method="post" action="post.php">
   <h1>Nice to meet you. I am POST_DEMO!</h1>
   <h2>What is your name?</h2>
   <input type="text" name="Name" id="Name" />
   <input type="submit" name="button" id="button" value="Confirmed" />
  </form>
 </body>
</html>

基本上這是一個打招呼的網頁,網頁中有一個表單讓使用者填入自己的名字,送出表單後網頁會重新載入並顯示 Hi "使用者名字" 的訊息,當然機器人應該也能跟網頁打招呼,於是借助 curl 的 POST 工能,在 setopt 時增加 POST 以及 POSTFIELD 的設定讓機器人也能送出表單。

假設 post.php 路徑為 http://www.mypage.tw/post.php ,Post 機器人如下:

#! /usr/bin/env python
import pycurl

class GetPage:
    def __init__ (self, url):
        self.contents = ''
        self.url = url

    def read_page (self, buf):
        self.contents = self.contents + buf

    def show_page (self):
        print self.contents

class GetPageByFakeBrowser(GetPage):
    def __init__ (self, url, ua):
        self.contents = ''
        self.url = url
        self.ua = ua

mypage = GetPageByFakeBrowser( \
"http://www.mypage.tw/post.php", \
"Opera/9.80 (Windows NT 5.1; U; cs) Presto/2.2.15 Version/10.00")
testcurl = pycurl.Curl()
testcurl.setopt(testcurl.URL, mypage.url)
testcurl.setopt(testcurl.USERAGENT, mypage.ua)
testcurl.setopt(testcurl.WRITEFUNCTION, mypage.read_page)
testcurl.perform()
testcurl.setopt(testcurl.POST, 1)
testcurl.setopt(testcurl.POSTFIELDS, "Name=Robot&button=confirmed")
testcurl.perform()
testcurl.close()
mypage.show_page()

如此一來機器人就有讀取網頁以及送出表單的功能,接下來我們希望它能做一些較複雜的事情。

沒有留言:

張貼留言