php - 如何在访问另一个站点之前开始与一个站点的会话?
问题描述
我想从一个网站提取 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 数据
实际结果:只有一个。
解决方案
没错,这是一个模糊的问题,但是,如果 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 请求自定义为它们需要的内容。
推荐阅读
- python - 如何在 python 中将我的变量与另一个变量附加(+=)之前添加新行?
- intellij-idea - IntelliJIDEA 向我显示“从 waitForDisplayed 返回的承诺被忽略”,即使我使用了 TestRunner 模式的 @wdio/sync 包
- c# - 将动态变量转换为列表
或数组 - javascript - 如何在发送到 Outlook 的 html 页面中对齐图像旁边的表格
- javafx - JavaFX make Node partially mouseTransparent
- android - Android Studio:找不到 PackageManager 包 | 如何在 Android 11 上访问软件包?
- python - 从 django 修剪下载的 pdf 文件
- c++ - C++ 多线程:如何为许多“工作”重用线程?
- java - 我将如何尝试捕获异常?
- javascript - 我是编程和 javascript 方面的新手,所以请帮我处理循环