所以我有一个脚本作为get参数传递了一个URL,因此尝试将该页面的内容写入文件。在未经过身份验证的页面上,它工作正常,但是当我尝试在需要身份验证的页面上使用它时,它会中断。
具体来说,这些是我已经登录的页面,所以我假设制作一个标准的cURL请求,我目前设置的所有Cookie都可以使用,但它没有。最初,我收到了302回复,但是如果我设置了“跟进”#39;如果是这样,我最终会访问网站的登录页面,而不是我想要的网页。
$client = curl_init();
//curl_setopt($client, CURLOPT_HEADER, true);
curl_setopt($client, CURLOPT_RETURNTRANSFER, true);
curl_setopt($client, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($client, CURLOPT_URL, $pageToLoad);
/* Supposedly libcurl loads all cookies auto-magically if you don't set CURL_COOKIESESSION
if (isset($_SERVER['HTTP_COOKIE'])) {
curl_setopt($client, CURLOPT_COOKIE, $_SERVER['HTTP_COOKIE']);
}
*/
$response = curl_exec($client);
curl_close($client);
我有一种沉闷的感觉,我需要为此设置一个cookiejar文件('沉没',因为我的脚本在开发服务器上没有写权限) ,但你有什么想法?
修改: 所以,作为一个白痴,事实证明我确实有一些写访问...无论如何,在我的主目录中创建了一个临时文件夹,我已经验证了我的脚本可以写:
$fname = '/home/temp/cookies.txt';
if( $save = fopen($fname, 'w') ) {
fwrite($save, 'testing');
}
运行脚本,然后低估,测试'出现在第一行。
我已将以下两行添加到我的cURL请求中:
curl_setopt($ch, CURLOPT_COOKIEJAR, '/home/temp/cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, '/home/temp/cookies.txt');
在我的场景中没有任何改变。 cookies.txt文件仍然只是说'测试'并且没有存储任何cookie,也没有最后一次访问'时间的变化,对我而言意味着这些线条没有做任何事情。
还有什么想法吗?我有点难过:\
答案 0 :(得分:1)
是的,您需要同时设置CURLOPT_COOKIEFILE
和CURLOPT_COOKIEJAR
选项。 'file'版本是从哪里加载cookie。 jar是curl对象终止时应该保存cookie的地方。它们可以是同一个文件。
如果您没有在服务器上创建实际文件的写入权限(如果您在/ tmp上没有至少写入权限或等效的话,则非常奇怪),您可以使用{{1 }} wrapper。
答案 1 :(得分:1)
这是我心爱的这类任务模式:
$loginUrl = 'http://www.remote_site.de/login.php';
$loginFields = array('username' => 'username', 'password' => 'password');
getUrl($loginUrl, 'post', $loginFields);
//now you're logged in and a session cookie was generated
$remote_page_content = getUrl('http://www.remote_site.de/some_page.php');
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, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
$buffer = curl_exec($ch);
curl_close($ch);
return $buffer;
}
答案 2 :(得分:0)
所以我拿出了原始的cURL代码,并从一个不同的项目中复制了一些Zend特定的代码,这似乎在很大程度上起作用(不确定为什么......)。我遇到的其他问题只与CoSign(http://cosign.sourceforge.net/)和使用代理cookie有关。感谢那些提供答案的人!