怎么得到响应http头?

时间:2016-05-24 05:45:56

标签: perl http header cgi basic-authentication

我的最后一个问题是如何在perl中实现基本身份验证,我得到了答案。 之后我试着编写我的code.i在我的http标题中使用-status => '401 Not Authorized'当我尝试打开我的程序时它要我输入用户名和密码。在我的代码中我得到了包含ENV变量的标题包括这个用户名和密码,并检查它是否是我想要的。我的问题是,当我在身份验证框中输入用户名和密码,如下basic authentication

我应该点击取消按钮来获取响应标题!!那么这里的确定按钮是什么? 它是我的验证码

print header(-type => 'text/html', -status => '401 Not Authorized',
         'WWW-Authenticate' => 'Basic realm="Videos"');

print "<HTML>";
print "<HEAD>";

print "<TITLE>this is Test-Case</TITLE>";
print "</HEAD>";

my $signin = $ENV{HTTP_AUTHORIZATION};
my($basic,$userpass) = split( ' ', $signin );
($userpass,$eq) = split( '=',$userpass );
$userpass = decode_base64($userpass);
my ($user,$pass) =  split( ':',$userpass );
my $query = new CGI;
if($user eq 'aa' and $pass eq 'aa'){
show something
}
else{
     print "wrong user or pass";
}

之前我曾尝试使用CGI::Auth::Basic,但它对我不起作用并在模块中显示错误。

感谢您的回答。

  一段时间后我解决了我的问题所以我决定告诉谁也有这个问题的答案。   你应该先检查是否定义了$ ENV {HTTP_AUTHORIZATION}。如果定义了你应该检查用户通行证,如果它是真的,你打印&#34;内容类型:text / HTML&#34;,&#34; \ ñ\ n&#34;这意味着200ok!如果未定义ENV,则应打印打印标题(-type =&gt;&#39; text / html&#39;,-status =&gt;&#39; 401 Not Authorized&#39;,&# 39; WWW-Authenticate&#39; =&gt;&#39;基本领域=&#34;视频&#34;&#39;)以显示身份验证框。

    $signin = $ENV{HTTP_AUTHORIZATION};
    if(defined $signin){
       check user and password here
       if(true user and password){
          print "Content-Type: text/HTML", "\n\n";
          do your all works here
       }
       else{
          wrong password
       }
    }
    else{
         print header(-type => 'text/html', -status => '401 Not   Authorized','WWW-Authenticate' => 'Basic realm="Videos"');
    }

1 个答案:

答案 0 :(得分:1)

HTTP Basic Auth分两步完成:

第一步:

  • 浏览器发送请求
  • 服务器使用HTTP状态码401
  • 回复完整的HTTP响应(标题,正文)
  • 浏览器显示(浏览器特定的)对话框,要求输入用户名和密码
  • &#34; OK&#34;在那个对话框上,典型的开始第2步
  • &#34;取消&#34;在该对话框上通常显示之前收到的响应主体 - 但这取决于浏览器实现。不要依赖它!

第二步:

  • 浏览器再次重新发送原始请求,但添加了Authorization标题
  • 服务器检查用户名和密码,并发送一个完整的响应(标题,正文),其中包含HTTP状态代码200(OK)或401(在这种情况下:&#34;用户名或密码错误,再次尝试&#34;)< / LI>
  • 代码401:查看步骤1的浏览器行为
  • 代码200:照常显示网站
  • 任何其他代码也有效:用于重定向用户的302,用于显示错误的500等等。

希望能回答你的问题。如果没有,我不明白你的问题。