在从该页面加载资源之前将HTTP身份验证传递给页面

时间:2017-06-08 11:59:40

标签: php html curl

我有一个页面可以动态创建从另一个页面抓取的图像的URL。解释图像的src包含EPOCH中图形的开始和结束时间的时间戳:

<img src="http://checkstuff.com/livedata/index.php/image?source=0&host=randomhost.com&start=$start_time&end=$end_time&graph_height=150&graph_width=520"></img>

该页面包含一个HTML表单,用户可以输入一些数据,例如开始和结束日期和时间:

<form action="index.php" method="POST" name="past">
<div>
Set start time of graphs:
<br>
Date: <input type="date" name="start_date" value="<?php if (isset($_POST['start_date'])) {echo $_POST['start_date'];}?>" required></input>
Hour: <input type="number" name="start_hour" value="<?php if (isset($_POST['start_date'])) {echo $_POST['start_hour'];}?>" required></input>
Minute: <input type="number" name="start_minute" value="<?php if (isset($_POST['start_date'])) {echo $_POST['start_minute'];}?>" required></input>
<br>
</div>

<div>
Set end time of graphs:
<br>
Date: <input type="date" name="end_date" value="<?php if (isset($_POST['end_date'])) {echo $_POST['end_date'];}?>" required></input>
Hour: <input type="number" name="end_hour" value="<?php if (isset($_POST['end_hour'])) {echo $_POST['end_hour'];}?>" required></input>
Minute: <input type="number" name="end_minute" value="<?php if (isset($_POST['end_minute'])) {echo $_POST['end_minute'];}?>" required></input>
<br>
</div>

<div>
<input type="submit" value="Go"></input>
</div>
</form>

我的PHP接下来全部并将其更改为EPOCH并将值传递给img src(对于信息,其中有3个并排,所有这些仅适用于不同的主机):

$start_date = strtotime($_POST['start_date']);
$start_hour = $_POST['start_hour'];
$start_minute = $_POST['start_minute'];

$end_date = strtotime($_POST['end_date']);
$end_hour = $_POST['end_hour'];
$end_minute = $_POST['end_minute'];

$start_time = $start_date + ($start_hour*60*60) + ($start_minute*60) + 3600;
$end_time = $end_date + ($end_hour*60*60) + ($end_minute*60) + 3600;

我的问题是,当我导航到我的页面时,由于401错误“checkstuff.com”(在本例中)作为基本HTTP身份验证,因此无法加载图像。对于Firefox,我可以输入用户并传递到src,如下所示:

<img src="http://user:password@checkstuff.com/livedata/index.php/image?source=0&host=randomhost.com&start=$start_time&end=$end_time&graph_height=150&graph_width=520"></img>

但是我使用Chrome会告诉我这是折旧的,并且不允许传递凭据。所以我已经搜索谷歌并发现可能cURL for php可能对我合作,我把下面放在我的php文件的顶部:

$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);
$result=curl_exec ($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);   //get status code
curl_close ($ch);

要尝试进行身份验证并且图片无法加载,我在控制台中收到401错误。

我的问题是:

  1. 这是正确的方法吗?
  2. 如果是这样,为什么cURL不起作用?
  3. 我错过了一些可以通过身份验证的内容吗?
  4. 我试图google这个并在SO上找到每次指向cURL的页面并使用这些帖子中建议的代码得到的结果与此处发布的相同。

    有关信息: 如果我导航到请求的页面,在另一个选项卡中,首先在src中输入用户名和密码,并重新加载我的页面,图像加载没有问题。以防万一,任何答案都会导致我的页面无法正常工作。此外,PHP服务器驻留在localhost上,我从localhost(Win10中的XAMPP)加载页面 - 这与服务器和客户端是不同的会话有关吗?

0 个答案:

没有答案
相关问题