2011-01-25 30 views
9

मैं एक पर्ल स्क्रिप्ट पर निम्न सर्वर त्रुटि मिल रही है: स्क्रिप्ट सेस्क्रिप्ट से विकृत हेडर। बुरा हैडर = <! DOCTYPE html>

विकृत हैडर। बुरा हैडर =:


#!"C:\XAMPP\perl\bin\perl.exe" -T 

use strict; 
use warnings; 

use CGI; 
use CGI::Carp qw/fatalsToBrowser/; 
use WWW::Mechanize; 

my $q = CGI->new; 

my $url = 'http://www.youtube.com'; 

my $mechanize = WWW::Mechanize->new(autocheck => 1); 

$mechanize->get($url); 

my $page = $mechanize->content(); 

print $page; 

अग्रिम धन्यवाद: youtube_perl.pl,

यहाँ मेरी स्रोत कोड है!

उत्तर

15

यह पता लगाया। इससे पहले कि मैं पृष्ठ मुद्रित करने का प्रयास किया निम्नलिखित जोड़ने के लिए किया था:

print "Content-type: text/html\n\n"; 

मुझे लगता है कि पर्ल पहले हैडर को परिभाषित करने के बिना HTML पृष्ठों मुद्रित नहीं कर सकते। स्क्रिप्ट त्रुटि

से

विकृत हैडर अपने त्रुटि लॉग फ़ाइल में:

+3

@ user589294 - नहीं। पर्ल उन्हें प्रिंट कर सकता है। लेकिन वे वैध HTTP प्रतिक्रिया नहीं होंगे। तो यदि आप एचटीएमएल पर ट्रांसपोर्ट करने के लिए पर्ल द्वारा मुद्रित अपना एचटीएमएल पेज चाहते हैं तो आपको वास्तव में एक पूर्ण HTTP प्रतिक्रिया मुद्रित करने की आवश्यकता है - पर्ल – DVK

+7

के साथ कुछ भी नहीं मिला है बेशक पर्ल एचटीएमएल पेजों को हेडर के बिना प्रिंट कर सकता है! हालांकि, आप एक हेडर प्रिंट किए बिना एक CGI स्क्रिप्ट नहीं लिख सकते हैं। बेहतर है: 'प्रिंट $ q-> हेडर(); '। [Perldoc CGI] देखें (http://perldoc.perl.org/CGI.html)। – mscha

+1

HTTP बोलते समय आपको \ \ '' EOL के रूप में '\ x0D \ x0A' का उपयोग करना चाहिए। HTTP निर्दिष्ट करता है कि लाइनों को सीआर-एलएफ के साथ समाप्त किया जाना चाहिए जबकि '\ n' आपके वर्तमान वातावरण के लिए लाइन मार्कर का अंत है, \ n' आपके लिए \ x0D \ x0A' होने के कारण होता है क्योंकि आप विंडोज़ पर चल रहे हैं । –

0
print "Content-type: text/html\n\n"; 

उपयोग \n\n इस के बिना यह कुछ भी यह दे देंगे मुद्रित नहीं होंगे।