2012-05-13 64 views
0

ERS,Python的 - 嘗試編寫一個腳本,測試HTTP接口

我仍然得到與Python的基本交手..

我現在的要求是建立一個Python腳本,這將考驗多個設備的基於Web的界面的可用性(例如,您可能需要通過Web瀏覽器輸入「http://192.168.0.2:9876」),這不必過於複雜。

我想從簡單的bash curl命令轉換,最初我有這樣的事情在一個bash腳本如下:

date=`date +"%Y-%m-%d_%H-%M-%S-%N"` 
    curl -s --connect-timeout 1 ${ip} -o /dev/null 
    test=$? 
    if [[ $test == 0 ]] ;then 
      echo "${date}:webping - Web Page Up for ${ip}" >> $log 
    else 
      echo "${date}:webping - Web Page Down for ${ip}" >> $log 
    fi 

其供職於原來的概念,但我希望有在Python中有類似的東西。輸出可能會有所不同,在合理的範圍內...任何人都可以從哪裏開始。

PS我已經看過這裏的一些其他問題,但它們似乎給出了誤報,其中接口已被「取下」(即,我停止了該服務)並且它仍然給出200的狀態代碼。

編輯:下面是我試過的代碼。

for url in ["http://www.google.co.uk", "http://192.168.0.2:8000"]: 
    try: 
      connection = urllib2.urlopen(url) 
      print connection.getcode() 
      connection.close() 
    except urllib2.HTTPError, e: 
      print "none" 

更正:我得到下面的結果...

Traceback (most recent call last): 
    File "<stdin>", line 3, in <module> 
    File "C:\Python27\lib\urllib2.py", line 126, in urlopen 
    return _opener.open(url, data, timeout) 
    File "C:\Python27\lib\urllib2.py", line 391, in open 
    response = self._open(req, data) 
    File "C:\Python27\lib\urllib2.py", line 409, in _open 
    '_open', req) 
    File "C:\Python27\lib\urllib2.py", line 369, in _call_chain 
    result = func(*args) 
    File "C:\Python27\lib\urllib2.py", line 1173, in http_open 
    return self.do_open(httplib.HTTPConnection, req) 
    File "C:\Python27\lib\urllib2.py", line 1148, in do_open 
    raise URLError(err) 
urllib2.URLError: <urlopen error [Errno 10061] No connection could be made because the target machine actively refused it> 

我寧願不要看到蟒蛇錯誤輸出。

在此先感謝

+2

發佈您嘗試過的Python代碼,運行它時得到的結果以及期望的結果。 「將此腳本轉換爲X語言」,對於SO來說不是一個真正的問題。 – jordanm

+0

@jordanm,對不起,請參閱上面的代碼編輯。我希望當Web界面不可用時(即由於服務已停止或出現故障/錯誤而停機),restult會有所不同。 – MHibbin

+0

如果沒有任何內容接受端口上的連接,則應拋出異常。在我的機器上進行快速測試會拋出:'urllib2.URLError:'。你沒有捕獲urllib2.URLError,它不會拋出異常嗎? – jordanm

回答

0

看看http://docs.python-requests.org/en/latest/index.html爲Python模塊提供你需要用一個漂亮的友好API的設施。在這種情況下,你會做一些事情沿着這些路線:

import requests 
... 
try: 
    r = requests.get(url, timeout=1) 
    ok = (r.status_code // 100) == 2 
except: 
    ok = False 

# now use the value of ok 

雖然我不知道我用那裏(成功意味着2xx應答)的特定測試是否是你想要什麼。

+0

我一直希望在多個系統上使用它,我可以在不安裝它的情況下使用「請求」模塊嗎? ......正如我所說我還在學習。 :) – MHibbin

+0

不,你不能使用請求模塊而不安裝它。如果你想要的東西不依賴Python以外的任何東西,你需要'urllib2'模塊(它是Python標準庫的一部分)。你的代碼會更便攜,但更醜陋。 –

+0

好的謝謝。網站上的內容看起來很有趣,並且會考慮更多的靜態安裝。 – MHibbin

相關問題