2012-05-13 34 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

相关问题