以 POST Method 發布訊息 (Python)

以 POST Method 發布訊息 (Python)

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() 


如有錯誤 歡迎指正