如何在Linux下安全地更新BaseHTTPServer的处理程序?

时间:2015-07-25 14:10:06

标签: python basehttpserver basehttprequesthandler

我正在尝试编写一个程序,用一些用户给定的参数来更改网页的内容。经过几次尝试和一些谷歌搜索,我已经设法得到一些结果(我把网络服务器放在一个线程中,以继续主程序中的其他任务)。它似乎在windows中运行得非常流畅,但我总是有一个

  

socket.error:[Errno 98]地址已在使用中

当我从我的linux机器上尝试时(整个事情必须在最后的Rasian上运行)。

我读了一些here,它解释了SO_REUSEADDR套接字选项(我认为它与之关注)在不同操作系统之间有不同的行为(如果我没有被误解,它在Windows上“有效”,这要归功于但是我无法找到一个解决办法让它在Linux上以这种方式工作,因为默认情况下此选项已设置为True。

以下是生成错误的代码的简化摘要:

import web

probe = raw_input("1st content: ")
web.web(probe)

probe = raw_input("2nd content: ")
web.web(probe)

raw_input()

使用此模块(web.py)

# -*- coding: utf8 -*-

def web(text):
    from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
    from SocketServer   import ThreadingMixIn
    import threading


    class Handler(BaseHTTPRequestHandler):

        def do_GET(self):
            self.send_response(200)
            self.end_headers()
            self.wfile.write(bytes(text.encode('utf-8')))
            self.wfile.close()
            return

    class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
        allow_reuse_address = True

    server = ThreadedHTTPServer(('', 8080), Handler)
    print 'Now serving, use <Ctrl+C> to break'

    thread = threading.Thread(target = server.serve_forever)
    thread.daemon = True
    thread.start()

有没有真正的解决方案可以摆脱这个错误?或者是否有更好的方法来管理orger中的处理程序以实现我的目标?

编辑:输入“第二内容”后发生错误。第一个实例运行完美,所以我可以确定套接字没有被其他任何东西使用。

感谢所有人!

1 个答案:

答案 0 :(得分:0)

我没有彻底分析你的代码,但对我来说,看起来你的linux机器很可能在端口8080(使用的标准端口)上运行某种代理服务。

尝试 netstat -tunlp 命令,查看是否有某些内容尚未占用该端口。

编辑: 另一个场合的专业提示:在Windows上,skype默认使用端口80和433,它可以在属性中切换。