我想编写Python脚本,该脚本将:

  • 在某些端口
  • 上启动SimpleHTTPServer
  • 向服务器发送请求,并通过POST发送一些数据
  • 以交互方式通过shell运行脚本并与其交互

  • 现在,代码如下所示:
    import SimpleHTTPServer
    import SocketServer
    import urllib
    import urllib2
    
    # Variables
    URL = 'localhost:8000'
    PORT = 8000
    
    # Setup simple sever
    Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
    httpd = SocketServer.TCPServer(("", PORT), Handler)
    print "serving at port", PORT
    httpd.serve_forever()
    
    # Getting HTML from the target page
    values = {
        'name': 'Thomas Anderson',
        'location': 'unknown'
    }
    data = urlilib.urlencode(values)
    req = urllib2.Request(url, data)
    response = urllib2.urlopen(req)
    html = response.read()
    

    问题是,一旦我运行脚本
    python -i foo.py
    

    它打印serving at port 8000,然后卡住。我敢打赌,这对于Python专家来说是微不足道的,但是可以得到帮助。

    最佳答案

    将服务器作为另一个进程运行,这将允许您运行脚本的其余部分。

    我也宁愿使用requests而不是urllib。

    import SocketServer
    import SimpleHTTPServer
    
    import requests
    import multiprocessing
    
    # Variables
    PORT = 8000
    URL = 'localhost:{port}'.format(port=PORT)
    
    # Setup simple sever
    Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
    httpd = SocketServer.TCPServer(("", PORT), Handler)
    print "Serving at port", PORT
    
    # start the server as a separate process
    server_process = multiprocessing.Process(target=httpd.serve_forever)
    server_process.daemon = True
    server_process.start()
    
    # Getting HTML from the target page
    values = {
        'name': 'Thomas Anderson',
        'location': 'unknown'
    }
    
    r = requests.post(URL, data=values)
    r.text
    
    # stop the server
    server_process.terminate()
    

    关于Python:运行SimpleHTTPServer并在脚本中对其发出请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34932268/

    10-14 18:47
    查看更多