php外部站点登录然后转到另一个页面

标签 php http curl post http-post

我需要用 php 登录到另一个站点,然后从该站点的另一个页面获取内容,因为登录后它会转到主页,我需要客户页面。 我尝试使用 file_get_contents 和 curl,但众所周知,后者在这里使用 php curl 的代码更好:

$username='username';
$password='password';
$cookie="/home/cookie.txt"; 

$url = 'http://the-site.com/';
$postdata = "?&username=$username&password=$password&op=login&rUrl=? 
op=customers";

$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
curl_setopt ($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); 
curl_setopt ($ch, CURLOPT_REFERER, $url); 

curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata); 
curl_setopt ($ch, CURLOPT_POST, 1); 
$result = curl_exec ($ch); 


$result = curl_exec ($ch); 

echo $result;  

curl_close($ch); 

oprUrl 是隐藏输入标签的名称。 如果我将 $url+$postdata 放在浏览器的地址栏中,它会转到所需的页面,但通过代码它不会按预期工作,它会保留在登录页面而无需输入。

最佳答案

您的 $postdata 似乎无效 - 它不应该有前导 ?&op 也出现了两次,第二次是 op=customers 又是 ?:

$postdata = "?&username=$username&password=$password&op=login&rUrl=? op=customers";

http_build_query此处推荐以确保您生成精确的 URL 编码查询字符串,如下所示:

$postdata = [
    'username' => $username,
    'password' => $password,
    'op' => 'login',
    'rUrl' => 'customers',
];

echo '$postdata: ' . http_build_query($postdata);
exit;

关于php外部站点登录然后转到另一个页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50606771/

相关文章:

php - 获取两个日期之间的日期列表并将数据插入数据库

bash - 来自 bash 脚本的错误状态值

javascript - 将 URL 传递到 JSON 数组

python - 如何将 CURL 转换为 Python 请求

http - 如何在 ASP.NET Core Controller 中接收 `multipart/mixed`

JS函数的PHP输出值

php - 如何在更新记录时连接列值

php - 为什么我可以在 PHP 中的 SQLite 数据库上使用 SELECT 而不是 INSERT?

java - 用 Java 发送 40(ish) HTTP 请求的最快方法是什么?

http - jQuery.ajax 在响应结束之前获取服务器刷新的数据的开始