2011-11-29 2 views
7

나는 html로 클라이언트에게 먹이를 줄 수있는 약간의 스크립트를 설정했다.파이썬으로 http 헤더 보내기

import socket 

sock = socket.socket() 
sock.bind(('', 8080)) 
sock.listen(5) 
client, adress = sock.accept() 


print "Incoming:", adress 
print client.recv(1024) 
print 

client.send("Content-Type: text/html\n\n") 
client.send('<html><body></body></html>') 

print "Answering ..." 
print "Finished." 

import os 
os.system("pause") 

그러나 브라우저에는 일반 텍스트로 표시됩니다. 내가 뭘해야하는지 말해 줄 수 있니? 난 그냥 나에게 도움이 구글에서 뭔가 ..

감사를 찾을 수 없습니다.

답변

13

응답 헤더에는 성공을 나타내는 응답 코드가 포함되어야합니다. 콘텐츠 형식 라인 전에 추가

client.send('HTTP/1.0 200 OK\r\n') 

을 또한, 테스트가 더 볼 수 있도록 페이지에있는 일부 콘텐츠 넣어 :

client.send('<html><body><h1>Hello World</body></html>') 

응답 후를 전송의를 닫습니다

client.close() 

:와 관련하여

다른 포스터에서 설명한대로 \r\n 대신 각 줄을 \n으로 끝내십시오.

이러한 추가 기능을 통해 성공적인 테스트를 수행 할 수있었습니다. 브라우저에서 localhost:8080을 입력했습니다.

여기에 모든 코드입니다 :

import socket 

sock = socket.socket() 
sock.bind(('', 8080)) 
sock.listen(5) 
client, adress = sock.accept() 

print "Incoming:", adress 
print client.recv(1024) 
print 

client.send('HTTP/1.0 200 OK\r\n') 
client.send("Content-Type: text/html\r\n\r\n") 
client.send('<html><body><h1>Hello World</body></html>') 
client.close() 

print "Answering ..." 
print "Finished." 

sock.close() 
+1

을 더러운 HTTP 정보를 않습니다 ... 그리고 \ 연구 \에 \ n을 \ 없음을 대체하는 것을 잊지 마세요 n \ r \ n HTTP는 CRLF를 헤더 뒤에 보내야하기 때문에. – werewindle

+0

'\ n \ n'대신 '\ r \ n \ r \ n'을 사용하는 것이 더 좋습니다. – dmitry

+0

와우, 알겠습니다. 고맙습니다 ! http 프로토콜을 사용하는 서버와 클라이언트 간의 교환에 관한 관련 문서가 있습니까? –

0

webob뿐만 아니라 당신을 위해

from webob import Response 
.... 

client.send(str(Response("<html><body></body></html>"))) 
+0

webob은 올바른 '\ r \ n'대신 줄을 구분하기 위해'\ n'을 사용합니다. 이것은 [# 146] (https://github.com/Pylons/webob/pull/146)입니다. 브라우저가 신경 쓰이는 것처럼 보이지 않으므로 대부분의 경우 솔루션이 정상적으로 작동합니다. –