2011-07-09 11 views
0

broswerで停止ボタンを押すまで、空白行が検出された後にプログラムが停止したようです。HTTP POSTリクエストを公開しているので、Perlで空白行の後ろに行を挿入するにはどうすればよいですか?

停止ボタンが押される前に:

enter image description here

停止ボタンが押された後:ここ

enter image description here

は、コードの一部である:

while (accept CONNECTION, SERVER) { 
    select CONNECTION; $| = 1; select STDOUT; 
    print "\n>> Client connected at ", scalar(localtime), "\n"; 

    my $isGet = 1; 
    my $isPostAndBlankLineDetected = 0; 
    while (<CONNECTION>) { 
    s/\r?\n//; 
    my $msg = $_; 
    rubyP "$msg"; 

    if ($msg =~ /GET/) { 
     processGet($msg); 
     last; 
    } 

    if ($msg =~ /POST/) { 
     setReqMethodAndReturnUri($msg); 
     $isGet = 0; 
    } 

    if ($isPostAndBlankLineDetected) { 
     pp "isPostAndBlankLineDetected is true"; 
     last; 
    } 

    if(! $isGet) { #isPost 
     if ($msg =~ /Content-Length/) { 
     setContentLength($msg); 
     } 

     if ($msg eq "") { 
     $isPostAndBlankLineDetected = 1; 
     pp "done setting isPostAndBlankLineDetected"; 
     } 
    } 
    } 

    close CONNECTION; 
    print ">> Client disconnected\n"; 
} 

私はを持っていますif ($isPostAndBlankLineDetected)の声明。ここで

は、ソケット部です:

use Socket; 

require "helper.pl"; 

sub rubyP { #print raw string 
    my $arg = $_; 

    use Data::Dumper; 
    $Data::Dumper::Useqq = 1; 
    print Dumper $arg; 

} 


sub pp { 
    print "DEBUG: '$_[0]'\n"; 
} 



my $protocol = getprotobyname 'tcp'; 

my $port = 15032; 
my $server_addr = sockaddr_in($port, INADDR_ANY); 

socket SERVER, AF_INET, SOCK_STREAM, $protocol 
    or die "Unable to create socket: $!"; 

bind SERVER, $server_addr 
    or die "Unable to bind: $!"; 

listen SERVER, SOMAXCONN; 
+2

CPAN以外を使用するのではなく、独自のHTTPサーバを実装しようとする理由はありますか? HTTP :: Server :: SimpleとStarletは、使い方を見てみると良いことです。 – duskwuff

答えて

3

あなたが誤って次の「行」があると仮定します。たとえ何かが続くとしても、改行を持つことで終わらないかもしれません。

readContent-Lengthバイト。

+0

このような行はありませんか? '$ VAR1 =" "; DEBUG: '設定完了isPostAndBlankLineDetected' $ VAR1 = "ID = 1&passwd = 1"; 'syasあります。 – draw

+0

ありがとうございます!できます。 – draw

関連する問題