2011-11-29 8 views
7

के साथ http शीर्षलेख भेजना मैंने एक छोटी सी स्क्रिप्ट सेट की है जिसे क्लाइंट को HTML के साथ फ़ीड करना चाहिए।पाइथन

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") 

लेकिन यह ब्राउज़र में सादा पाठ के रूप में दिखाया गया है। क्या आप कृपया बता सकते हैं कि मुझे क्या करना है? मुझे बस Google में कुछ नहीं मिल रहा है जो मेरी मदद करता है ..

धन्यवाद।

उत्तर

13

प्रतिक्रिया शीर्षलेख में सफलता का संकेत देने वाला एक प्रतिक्रिया कोड शामिल होना चाहिए। सामग्री प्रकार लाइन से पहले, जोड़ें:

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

इसके अलावा, परीक्षण अधिक दिखाई बनाने के लिए, पेज में कुछ सामग्री डाल:

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

प्रतिक्रिया के बाद भेज दिया जाता है, बंद

client.close() 

और

0123: के सिलसिले

जैसा कि अन्य पोस्टर ने नोट किया है, \n के बजाय \r\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 विवरण है ... और भूल जाते हैं \ r \ \ n \ n बदलना नहीं n \ r \ n, क्योंकि HTTP को हेडर के बाद भेजने के लिए सीआरएलएफ की आवश्यकता होती है। – werewindle

+0

और '\ n \ n' – dmitry

+0

वाह के बजाय '\ r \ n \ r \ n' का उपयोग करने के लिए बेहतर है, यह है। धन्यवाद ! सर्वर प्रोटोकॉल के साथ सर्वर और क्लाइंट के बीच एक्सचेंज के बारे में कोई संबंधित दस्तावेज हैं? –

0

webob रूप में अच्छी तरह

from webob import Response 
.... 

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

ध्यान दें कि वेबोब सही \ \ \ n' के बजाय लाइनों को अलग करने के लिए '\ n' का उपयोग करता है। यह है [# 146] (https://github.com/Pylons/webob/pull/146)। ब्राउज़रों को परवाह नहीं लगती है, हालांकि, ज्यादातर मामलों में आपका समाधान ठीक काम करेगा। –