这是参考早期的StackOverflow问题login credentials,其中Tom B.建议使用此格式通过HTTP / HTTPS登录:username:password@domain.com
。
此方法会让检查页面来源的任何人都可以看到用户名和密码。
有没有办法通过PHP (可能是cURL)执行初始登录,然后继续HTML会话?我尝试了以下操作,但由于某种原因,会话未保存,导致正在进行的HTML失败:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://url.xxx');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "user:password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
curl_close($ch);
include 'sessionPage.html';
?>
这种格式也不起作用:
curl_setopt($ch, CURLOPT_URL, 'http://user:password@url.xxx');
如何通过PHP脚本成功登录并将会话转移到正在进行的HTML页面? 资源是第三方,因此我无法控制会话信息。
谢谢。
答案 0 :(得分:0)
您可以使用cookie文件来保存成功(手动)登录的session_id。这样,curl脚本将首先显示为创建会话ID的用户。
卷曲脚本
function get_data( $url ) {
$cookie = 'cookie.txt';
$ch = curl_init();
$timeout = 5;
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout );
curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookie );
curl_setopt( $ch, CURLOPT_COOKIEFILE, $cookie );
$data = curl_exec( $ch );
curl_close( $ch );
return $data;
}
Cookie文件(仅包含此行)
www.awebsite.com TRUE / FALSE 0 PHPSESSID 5rsiasdfasdfasdfasdf73dvi9r0
获取会话ID,手动登录相关网站,使用browser dev工具查看cookie并复制PHPSESSID
。显然,使用这种方法,您只能先自己获取session_id。
答案 1 :(得分:0)
仅当php在同一台机器上运行时才可能。您基本上需要做的是从cURL的响应中获取cookie并使用PHP将该cookie写入正确位置的文件系统以模拟成功登录。所有这些假设cookie被用于身份验证。还有其他形式的身份验证:持久表单,URL中的sessionid,IP地址等......