# coding=utf-8
import sys
import socket
import re def check_webserver(address, port, resource):
address = socket.gethostbyname(address) if not resource.startswith('/'):
resource = '/' + resource request_string = 'GET %s HTTP/1.0\r\n\r\n' % (resource)
print 'HTTP request: |||%s||||' % request_string
s = socket.socket()
failed = False
print 'Attempting to connect to %s on port %s' % (address, port)
try:
s.connect((address, port))
print 'Connected to %s on port %s' % (address, port)
s.send(request_string)
resp = s.recv(100)
print 'Received 100 bytes of HTTP response'
print '|||%s|||' % resp
except socket.error as e:
print 'Connection to %s on port %s failed: %s' % (address, port, e)
failed = True
finally:
print 'Close the connection'
s.close() if failed:
return False lines = resp.splitlines()
print 'First line of HTTP response: %s' % lines[0]
try:
version, status, message = re.split('\s+', lines[0], 2)
except ValueError:
print 'Failed to split status line'
return False if status in ['', '']:
print 'Success - status was %s' % status
return True
else:
print 'Failure - Status was %s' % status
return False if __name__ == '__main__':
from argparse import ArgumentParser
parser = ArgumentParser(description=u"基于socket的web服务器检测")
parser.add_argument(
'-a',
'--address',
dest="address",
default="localhost",
help="address for the server")
parser.add_argument(
"-p",
"--port",
dest="port",
type=int,
default=80,
help="port for the server")
parser.add_argument(
"-r",
'--resource',
dest='resource',
default="index.html",
help="resouce to check")
args = parser.parse_args()
check = check_webserver(args.address, args.port, args.resource)
print 'check_webserver returned: %s' % check
sys.exit(not check)

使用httplib

def check_webserver_by_httplib(address, port, resource):
address = socket.gethostbyname(address)
failed = False
if not resource.startswith('/'):
resource = '/' + resource
try:
conn = httplib.HTTPConnection(address, port)
print 'HTTP connection created successfully'
# make request
conn.request('GET', resource)
print 'request for %s successful' % (resource)
# get response
resp = conn.getresponse()
print 'response status: %s' % resp.status
except socket.error as e:
print 'HTTP connection failed: %s' % e
return False
finally:
conn.close()
print 'HTTP connection closed successfully' if resp.status in [200, 301]:
return True
else:
return False

web服务器检测的更多相关文章

  1. Web Service 其他服务器检测不到查询测试按钮

    1.Web Service 其他服务器检测不到查询测试按钮,config需要修改地方: <system.web> <webServices> <protocols> ...

  2. 前端学HTTP之WEB服务器

    前面的话 Web服务器每天会分发出数以亿计的Web页面,它是万维网的骨干.本文主要介绍WEB服务器的相关内容 总括 Web服务器会对HTTP请求进行处理并提供响应.术语“Web服务器”可以用来表示We ...

  3. 关于Web服务器的认识

    马上就要毕业了,也要开始找工作了,大学写了这么多代码了,却没有好好总结一下常用的概念很是遗憾额,就通过这篇博客记录一下我最常用的一些知识好了. 说到Web服务器,有很多文章都介绍的很好,之前看到一篇非 ...

  4. 多Web服务器之间共享Session的解决方案

    一.提出问题: 为了满足足够大的应用,满足更多的客户,于是我们架设了N台Web服务器(N>=2),在多台Web服务器的情况下,我们会涉及到一个问题:用户登陆一台服务器以后,如果在跨越到另一台服务 ...

  5. Web服务器的工作原理

    Web服务器的工作原理 Web服务器工作原理概述 很多时候我们都想知道,web容器或web服务器(比如Tomcat或者jboss)是怎样工作的?它们是怎样处理来自全世界的http请求的?它们在幕后做了 ...

  6. Jexus V5.8.0正式发布:跨平台的ASP.NET WEB服务器

    Jexus Web Server V5.8.0 已于今日(12月10日)正式发布,下载地址:http://www.linuxdot.net/. Jexus v5.8.0有如下的更新: 1,为反向代理增 ...

  7. ASP.NET 开发必备知识点(1):如何让Asp.net网站运行在自定义的Web服务器上

    一.前言 大家都知道,在之前,我们Asp.net 的网站都只能部署在IIS上,并且IIS也只存在于Windows上,这样Asp.net开发的网站就难以做到跨平台.由于微软的各项技术的开源,所以微软自然 ...

  8. web服务器工作原理

    Web服务器工作原理概述 转载自http://www.importnew.com/15020.html 很多时候我们都想知道,web容器或web服务器(比如Tomcat或者jboss)是怎样工作的?它 ...

  9. Web服务器Nginx多方位优化策略

    标签:性能 Web 架构 Nginx 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dongsong.blog.51cto.co ...

随机推荐

  1. String比较相等的问题探索

    String比较相等的问题探索 工作上,有个同事犯了个低级错误,把字符串的计较用了==.由于代码已经交付客户,上了生产环境,给公司带了了损失.于是看了他的代码,自己根据以前学的知识,写了几个小demo ...

  2. 为何 Delphi的 Local Variables 突然没有值显示了

    可能是上次编译后  code未再修改过. 试试 随便 输入一个空格,然后F9

  3. IE 11 回车事件代码不起作用但是在chrom可以正常运行解决办法

    今天遇到这个问题,搞半天开始以为是代码写错了,后面拿到chrom上执行发现是正常的,就是这段代码 function EnterPress(){          if(event.keyCode == ...

  4. php通过$_SERVER['HTTP_USER_AGENT']获取浏览器useAgent

    php通过$_SERVER['HTTP_USER_AGENT']获取浏览器useAgent

  5. .net WebService方法之重载、支持Session、支持request请求和response格式的浅析

    .net的webservice不支持web方法的重载,但是可以通过设置WebMethod属性的MessageName字段来达到重载web方法的目的. 通过设置WebMethod属性的EnableSes ...

  6. mysql server查询客户端连接数

    SELECT substring_index(HOST, ) AS host_name, state, count(*) FROM information_schema. PROCESSLIST GR ...

  7. 1.2 C++命名空间(namespace)

    参考:http://www.weixueyuan.net/view/6326.html 总结: C++语言引入命名空间(Namespace)这一概念主要是为了避免命名冲突,其关键字为 namespac ...

  8. Swift网络封装库Moya中文手册之Endpoints

    Endpoints Endpoint是一种半私有的数据结构,Moya用来解释网络请求的根本构成.一个endpoint储存了以下数据: The URL. The HTTP method (GET,POS ...

  9. STL标准库-Move对容器效率的影响

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 C++11新增move()语法(我暂时交错右值引用),在前面我有一篇文章叫 C++11_右值引用 简单的介绍了右值引用类的实现, ...

  10. 使用kbmMW#1轻松实现REST

    使用kbmMW很容易创建REST服务器. 首先,我们制作服务器应用程序(或服务......取决于您). 在这种情况下,我们将添加一个简单的Form,为我们的kbmMW组件提供GUI和位置. 在Delp ...