我想从一个网站提取XML数据。但是,在被授权读取此类数据之前,我必须先与另一个建立连接。
我知道这个问题很模糊,我会尽力回答任何问题。
我必须从站点中提取XML数据(我们称其为site2)。但是,为了查看此数据,我必须首先访问链接中具有用户ID的site1。我完全不确定这是如何工作的,但是当我只是先访问site1,然后在浏览器中访问site2时,它是如何工作的。但是,由于我对正在发生的事情缺乏了解,我不知道如何在PHP中实现它。
我加入了一些注释行,因为这是我尝试过的方法,但最终没有任何内容打印到屏幕上。照原样,我提取了很少的数据,而无需先访问site1。
libxml_use_internal_errors(true);
#header('Content-Type: text/html');
#header("Location: site1");
$url = "site1.php?user_id=guest1";
$response = file_get_contents($url);
$url = "site2.php";
$response = file_get_contents($url);
print ($response);
$data = simplexml_load_string($response);
//print_r($data);
echo '<br>';
预期结果:大约100行XML数据
实际结果:只有一个。
答案 0 :(得分:1)
是的,这是一个模糊的问题,但是,如果site2正在从site1(可能是子域?)中寻找cookie,那么使用PHP curl的cookiejar
可能会有所帮助。
将您的请求从file_get_contents($url)
更改为使用curl请求。
在curl请求中,确保您链接到服务器上的空.txt
文件(这样可以存储Cookie)。
当您向site2发送请求时,它将发送您从site1收到的cookie。
示例:
$cookiejar = 'cookiejar.txt';
// Delete the old cookies from the last request:
if (file_exists($cookiejar)) unlink($cookiejar);
$ch = curl_init();
// Set our curl options:
$url = "site1.php?user_id=guest1";
curl_setopt_array($ch, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_HEADER => true,
CURLOPT_COOKIEJAR => $cookiejar, // Cookies saved
CURLOPT_COOKIEFILE => $cookiejar, // Cookies saved
));
// Execute curl and return results:
$result = curl_exec($ch);
/* DO WHATEVER YOU NEED TO DO HERE */
// Your new url:
$url = "site2.php";
curl_setopt_array($ch, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_COOKIEJAR => $cookiejar, // Cookies loaded
CURLOPT_COOKIEFILE => $cookiejar, // Cookies loaded
));
// Execute curl and return results:
$response = curl_exec($ch);
// Close curl:
curl_close($ch);
您显然可以将这些curl请求自定义为所需的内容。
答案 1 :(得分:0)
所以,我知道了。
使用HTTPHeaderLive,我看到site1正在存储cookie。每次重新加载页面时,cookie都是相同的,因此我将其作为标头硬编码到我的PHP脚本中,并通过我的file_get_contents()调用将其发送,并且可以正常工作!
cookie在会话中过期,因此,我将在脚本中找到一种自动执行此操作的方法。但是我们现在很好。