Отправить текст «http» через сокет python

Я пытаюсь создать HTTP-сервер, используя python. Дело в том, что я получаю все, чтобы работать, кроме как отправлять ответное сообщение; если сообщение имеет текст http , send() не работает.

Вот фрагмент кода:

 connectionSocket.send('HTTP/1.1 200 OK text/html') 

Вот и другие, которые я пробовал:

 connectionSocket.send(''.join('%s 200 OK text/html' % ('HTTP/1.1'))) connectionSocket.send('%s 200 OK text/html' % ('HTTP/1.1')) msg = 'HTTP/1.1 200 OK text/html' for i in range(0, len(msg)) connectionSocket.send(msg[i]) 

Единственное, что, кажется, работает, – это сущность, связанная с любым из символов в HTTP , например

 connectionSocket.send('HTTP/1.1 200 OK text/html') 

Где H эквивалентно H В противном случае браузер не отображает заголовок, полученный от сокета сервера python.

Проблема также возникает, когда я пытаюсь отправить 404 Message в сокет. Другое содержимое отображается, однако, как файл html, отправленный через сокет.

Я хочу знать, есть ли способ сделать это? Поскольку, если клиент не является браузером, объект html не будет понят.

заранее спасибо

Обновить:

Код:

 from socket import * serverSocket = socket(AF_INET, SOCK_STREAM) serverSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) serverSocket.bind(('127.0.0.1', 1240)) serverSocket.listen(1); while True: print 'Ready to serve...' connectionSocket, addr = serverSocket.accept() try: message = connectionSocket.recv(1024) filename = message.split()[1] f = open(filename[1:]) outputdata = f.read() #Send one HTTP header line into socket connectionSocket.send('HTTP/1.1 200 OK text/html') ## this is not working #Send the content of the requested file to the client for i in range(0, len(outputdata)): connectionSocket.send(outputdata[i]) connectionSocket.close() except IOError: connectionSocket.send('HTTP/1.1 404 File not found') ## this is not working connectionSocket.close(); 

serverSocket.close ()

Скриншоты:

Текст как «HTTP / 1.1 …»

введите описание изображения здесь

введите описание изображения здесь

Текст как «HTTP / 1.1 …»

введите описание изображения здесь

введите описание изображения здесь

HTML-код hello.html

 <html> <head> <title>Test Python</title> </head> <body> <h1>Hello World!</h1> </body> </html> 

Вы не возвращаете правильно сформированный HTTP-ответ. Ваша линия

 connectionSocket.send('HTTP/1.1 200 OK text/html') ## this is not working 

даже не заканчивается новой строкой, а затем сразу же следует содержимое вашего файла. Протоколы, такие как HTTP, достаточно точно указывают, что нужно отправить, и я нахожу, что это мало чем чудесно, что вы видели что-либо вообще в своем браузере.

Попробуйте что-нибудь вроде:

 connectionSocket.send('HTTP/1.1 200 OK\nContent-Type: text/html\n\n') 

Это начало правильно сформированного ответа HTTP 1.1 с основной линией ответа и одним заголовком. Двойная новая строка завершает заголовки, готовя клиента читать следующий контент.

http://www.jmarshall.com/easy/http/ является одним из многих доступных способов узнать немного больше о протоколе, который вы выбрали для использования. Удачи!

Я не уверен, что connectionSocket вы используете (какой модуль, библиотека и т. Д.), Но если эта вещь уже является частью процедуры, связанной с HTTP, вполне возможно, что она уже отправляет необходимую HTTP строку без вашего участия. Тогда ваш может нарушить процесс.

Кавитированная версия ( &#72;TTP …), вероятно, не распознается протоколом HTTP в браузере (я думаю, что цитирование распознается и интерпретируется только в более высоких слоях стека OSI) и поэтому не имеет такого же эффекта ,