首页 > 解决方案 > 如何在访问另一个站点之前开始与一个站点的会话?

问题描述

我想从一个网站提取 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 数据

实际结果:只有一个。

标签: php

解决方案


没错,这是一个模糊的问题,但是,如果 site2 正在从 site1 寻找 cookie(也许是子域?),那么使用 PHP curlcookiejar可能会有所帮助。

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 请求自定义为它们需要的内容。


推荐阅读