如何在Python中对特定URL进行HTTP调用,然后确定服务器是否已启动并运行。
我最近开始使用Python,所以不确定任何这样的库。
如果我打开以下网址 -
http://dbx45.dc1.host.com:8082/console
然后一些页面打开给我,这意味着我的服务器是UP和RUNNING。但如果它不是UP和RUNNING,那么它在CHROME上显示我这样 -
Oops! Google Chrome could not connect to http://dbx45.dc1.host.com:8082/console
在FIREFOX上 -
Unable to connect
Firefox can't establish a connection to the server at dbx45.dc1.host.com:8082
那么如何从Python中弄清楚我的服务器是否已启动并运行?
更新: -
这是我到目前为止所尝试的 -
status = urllib2.urlopen("http://dbx45.dc1.host.com:8082/console").read()
print status
如何简化此操作以了解服务器是否已启动并正在运行?
答案 0 :(得分:1)
一个易于使用的库就是请求。
import requests
page = requests.get('http://dbx45.dc1.host.com:8082/console')
然后你可以检查这个状态
page.status_code
200意味着它没问题,400或500的东西意味着出了问题。
答案 1 :(得分:1)
浏览器显示的错误是无法连接。所以我认为你所追求的是服务器是否真正在监听端口。为此,您不需要整个URL,只需要主机和端口以及简单的套接字连接测试。
import sys
import socket
def servertest(argv):
host = argv[1]
port = int(argv[2])
args = socket.getaddrinfo(host, port, socket.AF_INET, socket.SOCK_STREAM)
for family, socktype, proto, canonname, sockaddr in args:
s = socket.socket(family, socktype, proto)
try:
s.connect(sockaddr)
except socket.error:
return False
else:
s.close()
return True
if __name__ == "__main__":
if servertest(sys.argv):
print("Server is UP")
else:
print("Server is DOWN")
答案 2 :(得分:0)
如果无法打开网址或提供错误代码,您可以使用urllib
引发错误。
exception urllib2.URLError
http://docs.python.org/2/library/urllib2.html#urllib2.URLError
它还有一个reason
参数,您可以使用该参数缩小问题范围。
示例:
>>> import urllib2
>>> urllib2.urlopen("http://dbx45.dc1.host.com:8082/console")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 394, in open
response = self._open(req, data)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 412, in _open
'_open', req)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 372, in _call_chain
result = func(*args)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1199, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1174, in do_open
raise URLError(err)
urllib2.URLError: <urlopen error [Errno 60] Operation timed out>
要查看它是否已启动:
try:
urllib2.urlopen("http://dbx45.dc1.host.com:8082/console")
except urllib2.URLError:
print "Some error"
答案 3 :(得分:0)
matcher