python中如何通过web服务器将URL作为回复发送回去

2024-06-16 09:54:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python编写了这个httpweb服务器,它只发送回复“Website Coming Soon!”但是我希望这个web服务器应该发回客户端提供的URL,就像我写的那样

http://localhost:13555/ChessBoard_x16_y16.bmp

然后服务器应该回复相同的网址,而不是“网站即将到来!”信息。 请告诉我怎么做?你知道吗

服务器代码:

import sys
import http.server
from http.server import HTTPServer
from http.server import SimpleHTTPRequestHandler
#import usb.core

class MyHandler(SimpleHTTPRequestHandler): #handles client requests (by me)

    #def init(self,req,client_addr,server):
     #   SimpleHTTPRequestHandler.__init__(self,req,client_addr,server)      

    def do_GET(self):
        response="Website Coming Soon!"
        self.send_response(200)
        self.send_header("Content-type", "application/json;charset=utf-8")
        self.send_header("Content-length", len(response))
        self.end_headers()
        self.wfile.write(response.encode("utf-8"))
        self.wfile.flush()
        print(response)


HandlerClass = MyHandler
Protocol     = "HTTP/1.1"
port = 13555
server_address = ('localhost', port)
HandlerClass.protocol_version = Protocol

try:
    httpd = HTTPServer(server_address, MyHandler)
    print ("Server Started")
    httpd.serve_forever()
except:
    print('Shutting down server due to some problems!')
    httpd.socket.close()

Tags: importself服务器clientsendhttpserverresponse
1条回答
网友
1楼 · 发布于 2024-06-16 09:54:13

你可以按你的要求去做,但有点复杂。你知道吗

当客户端(如web浏览器)连接到您的web服务器时,它会发送如下请求:

GET /ChessBoard_x16_y16.bmp HTTP/1.1
Host: localhost:13555

这假设您的客户机使用的是HTTP/1.1,这可能适用于您现在所能找到的任何东西。如果您希望使用HTTP/1.0或更早版本的客户机,那么生活会更加困难,因为没有Host:头。你知道吗

使用Host头的值和作为参数传递给GET请求的路径,可以构造一个在许多情况下与客户端使用的URL相匹配的URL。你知道吗

但并不一定在所有情况下都匹配:

  • 客户机和服务器之间可能有一个代理,在这种情况下,代码看到的路径和主机名/端口可能与客户机使用的不同。

  • 可能存在修改目标ip地址和/或端口的数据包操作规则,以便代码看到的连接与客户端使用的参数不匹配。

do_GET方法中,可以通过 self.headers属性和通过self.path的请求路径。例如:

def do_GET(self):
    response='http://%s/%s' % (self.headers['host'],
                        self.path)

相关问题 更多 >