Python代理 - 需要帮助将HTTP标头发送到浏览器

时间:2015-03-19 15:00:32

标签: python http-proxy

我正在为我的项目制作一个代理,我正在尝试向浏览器(Firefox)发送一个HTTP标头,以继续我(代理服务器)和浏览器之间的“对话”。问题是:当我刷新任何页面时,页面保持加载状态。我使用套接字并选择代理:

import socket, select

#Sending a message for the waiting list
def send_Waiting_Messages(wlist):
    for msg in messages_to_send:
        clientSocket, data = msg
        if clientSocket in wlist:
            clientSocket.send('HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n')
            messages_to_send.remove(msg)

serverSocket = socket.socket()
serverSocket.bind(('0.0.0.0',8080))
serverSocket.listen(10)
open_client_sockets = []
messages_to_send = []

while True:
    rlist, wlist, xlist = select.select([serverSocket] + open_client_sockets, open_client_sockets, [])
    for currentSocket in rlist:
        if currentSocket is serverSocket:
            newSocket, addr = serverSocket.accept()
            open_client_sockets.append(newSocket)
        else:
            data = currentSocket.recv(1024)
            if data == "":
                open_client_sockets.remove(currentSocket)
                print 'Conn is closed'
            else:
                print data
                messages_to_send.append((currentSocket, 'Hello, ' + data))
    send_Waiting_Messages(wlist)

这些行:

clientSocket.send('HTTP/1.1 200 OK\r\n')
clientSocket.send('Content-Type: text/html\r\n\r\n')

用于发送标题。

感谢帮助!!

1 个答案:

答案 0 :(得分:1)

请注意,每个send_Waiting_Messages函数都会向所有已连接的客户端发送相同的响应。当套接字在wlist

时,我建议用基本的send函数替换它

这可能有效

import socket, select
serverSocket = socket.socket()
serverSocket.bind(('0.0.0.0',8080))
serverSocket.listen(10)
open_client_sockets = []

while True:
    rlist, wlist, xlist = select.select([serverSocket] + open_client_sockets, open_client_sockets, [])
    for currentSocket in rlist:
        if currentSocket is serverSocket:
            newSocket, addr = serverSocket.accept()
            open_client_sockets.append(newSocket)
        else:
            data = currentSocket.recv(2048)
            if data == "":
                open_client_sockets.remove(currentSocket)
                print 'Conn is closed'
            else:
                print data
                content_to_send = "The content that you want to send"
                currentSocket.send("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length:"+str(len(content_to_send))+"\r\n\r\n"+content_to_send)