我的服务器上有一个受密码保护的网络目录。该目录包含一些html页面(一种帮助文件),我想从我的桌面应用程序链接到该页面。
我希望桌面应用程序的用户能够单击应用程序中的按钮并查看受密码保护的页面,而无需在对话框中输入用户名和密码。该链接将类似www.mywebsite.com/seehiddenhelp.php?token=12345
如果传递了有效的令牌(我已对此位进行了排序),我希望php脚本自动登录并显示我指定的网页。
我想我需要使用cURL才能做到这一点,但我无法弄明白该怎么做!
到目前为止,我已经得到了:(顺便说一句,我已经取出了令牌验证位,只是用一个案例替换了它!)
<?php
$token = $_GET["token"];
switch ($token) {
case "ValidToken":
$url = "http://www.mywebsite.com/protected/index.html";
$username = "username";
$password = "password";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$URL);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 30 seconds
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //get status code
$result=curl_exec ($ch);
curl_close ($ch);
break;
}
?>
当我访问www.mywebsite.com/seehiddenhelp.php?token=12345它只显示一个空白页面,没有错误或任何只是一个空白页面,并且令牌留在网址栏中。理想情况下,我希望它登录,然后在地址栏中显示我用该URL指定的页面。
我想现在发生的事情是它正在获取文件的强制但却没有做任何事情吗?如何在屏幕上显示或重定向到它?
任何帮助将不胜感激!很抱歉,如果我对此缺乏了解,但我现在已经尝试找到解决方案了!
修改
我使用以下代码取得了更多成功:
//Variables
$target_url = "http://www.Mywebsite/secure/index.html";
$username = "username";
$password = "password";
//Contains encoded string to pass along for basic authentication purposes
$auth_token = base64_encode($username . '-' . $password);
//Create a new cURL handle
$ch = curl_init($target_url);
curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
$ckfile = tempnam ("/tmp", "CURLCOOKIE");
curl_setopt( $ch, CURLOPT_COOKIESESSION, true );
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile);
$response_data = curl_exec($ch);
echo $response_data;
if (curl_errno($ch)> 0){
die('There was a cURL error: ' . curl_error($ch));
} else {
//Close the handler and release resources
curl_close($ch);
}
当页面使用框架时,它似乎有点工作,框架显示在顶部和底部,但框架内的页面显示404页面?我想我越来越近但仍然没有线索!
编辑2
使用第二个代码示例我更改了索引页面上的代码,因此加载到框架中的url是完整的url,而不仅仅是toc.html,这将是本地的。然后它显示框架页面中的一个登录框,如果取消显示401,所以我的问题是,加载到框架中的页面不使用卷曲设置,所以我需要一种方法来验证主会话而不仅仅是卷曲会话用于渲染页面。任何人的想法?