php - 使用 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;
我可能在这里遗漏了一些东西,我将非常感谢任何帮助。
谢谢你。
解决方案
您需要设置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
推荐阅读
- java - Spring 根据请求参数使用不同的属性文件
- mysql - 如何在 MySQL 中进行 LEFT JOIN,我在 RIGHT 表中缺少键值?
- php - Foreach 循环中的 Codeigniter 和解密未按预期工作
- php - PHP:独立于平台的shebang放在PHP文件的顶部以随处使用PHP CLI执行它们?
- c++ - 将 HEX 转换为 DEC
- google-account - 为域创建 Google 帐户时出现问题
- android - 显示状态栏android
- java - 如何通过 Class.forName(...) 获取数组的类?
- javascript - 从服务订阅数据时,类型 void 上不存在错误属性订阅?
- javascript - Angular *ngFor在循环抛出对象时使用PIPE不起作用