首页 > 解决方案 > 使用 CURL POST (PHP) 登录到另一个站点

问题描述

我们的客户提供了一个网站,显示我需要报告的数据。

我的客户拒绝构建 API,因此我可以检索我需要的 JSON 数据,或者更好地提供对其数据库的只读访问权限。

所以我想,我可以创建一个在服务器中运行的脚本,该脚本可以访问站点、登录、搜索 HTML 表格标签并在循环中以数组的形式检索数据,对吗?

好吧,我不知道如何使用 cURL 正确登录该站点。

登录表单就像两个文本框和一个提交按钮一样简单,表单指向自身,提交后重定向到同一服务器中的另一个 PHP 文件,该文件实际上显示了我需要的数据。

我在网上搜索,确实找到了很多很好的例子。

但是当我尝试它时,它返回一个布尔值“True”,就是这样。

$url = 'https://www.potato.site/login/login_file.php';
$fields = array(
    'username' => urlencode('user'),
    'password' => urlencode('password'),
    'submit' => urlencode('Login')
);
$fields_string ="";

foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

//execute post
$result = curl_exec($ch);


//close connection
curl_close($ch);

echo $result;

我可能在这里遗漏了一些东西,我将非常感谢任何帮助。

谢谢你。

标签: phppostphp-curl

解决方案


您需要设置CURLOPT_RETURNTRANSFER选项以获取您的请求内容$result。否则,curl 返回 true/false 以指示成功。

curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
// $result now contains page contents

推荐阅读