以下是我一直用来编写脚本的代码,该脚本登录到我的大学网站,以便从登录后面提取文件。
一直发生的是它返回登录页面(记住我在此表单中的用户名),但它没有进行身份验证。我觉得密码没有被转移,但我不知道为什么。当我手动执行时,我已经尝试查看通过浏览器发送的帖子请求,一切都很好。字段应分别是用户名和密码......
<?php
$username = 'someuser';
$password = 'somepass';
$loginUrl = 'https://vault.andrews.edu/vault/goto/login';
$loginFields = array('username'=>$username, 'password'=>$password); //login form field names and values
$remotePageUrl = 'google.com'; // Will be changed to a remote page
$login = getUrl($loginUrl, 'post', $loginFields); //login to the site
$remotePage = getUrl($remotePageUrl); //get the remote page
function getUrl($url, $method='', $vars='') {
$ch = curl_init();
if ($method == 'post') {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
//curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.7.12 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.12");
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies/cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies/cookies.txt');
$buffer = curl_exec($ch);
print $buffer;
curl_close($ch);
return $buffer;
}
print $login;
?>
有人可以弄清楚为什么不通过?对不起,我不能分享真正的凭据供你们使用。
答案 0 :(得分:1)
你有两种方式
首先是添加
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST , false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER , false);
第二是供应证书 像这儿 SSL Certificate request with cURL
答案 1 :(得分:1)
您尝试使用的登录表单不会提交给自己。相反,它提交到https://vault.andrews.edu/vault/app/login/set
。此外,表单中可能需要隐藏字段service
,其值为http://www.andrews.edu/
。
进行这些更改:
$loginUrl = 'https://vault.andrews.edu/vault/app/login/set';
$loginFields = array('username'=>$username, 'password'=>$password, 'service' => 'http://www.andrews.edu/');
应该修复你的脚本。