在PHP上接受使用CURL的cookie

时间:2014-10-06 21:53:05

标签: php linux curl cookies

我正在尝试在Centos计算机上运行登录脚本。 该脚本的作用是使用用户名和密码登录到第三方站点并获取页面内容。

虽然脚本在我的电脑上完美运行(Windows上的XAMPP),但在我的Centos盒子中它似乎不起作用。登录后,它会一直重定向到登录页面(尽管登录成功)。 这是代码:

function request($url,$post)
{
$ch = curl_init();
$curlConfig = array(
    CURLOPT_URL            => $url,
    CURLOPT_POST           => 1,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_COOKIEFILE => 'cookies.txt',
    CURLOPT_COOKIEJAR => 'cookies.txt',
    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"',
    CURLOPT_FOLLOWLOCATION => 1,
    CURLOPT_REFERER => $url,
    CURLOPT_POSTFIELDS     => $post
);
curl_setopt_array($ch, $curlConfig);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
echo request('site.com/login.php',array("username" => "test", "password" => "test", "submit" => ""));

如何将此代码转移到Linux机器中的工作代码?我错过了哪一部分? 非常感谢,

问候。

2 个答案:

答案 0 :(得分:0)

代码确实很完美。所需的只是创建文件并为其提供适当的权限。 受到Marc B的启发。谢谢。

答案 1 :(得分:0)

问题在于您的cookie存储文件的路径。您使用的'cookies.txt'相对路径。相对路径适用于内部PHP函数/扩展,例如Filesystem函数。那是因为他们都可以访问有关当前PHP脚本的信息。但对于诸如CURL之类的外部扩展,情况并非总是如此。在大多数情况下,他们不知道当前PHP脚本的位置(实际上它取决于它的安装),这导致相对路径(例如'cookies.txt')不起作用。

因此,确保路径有效的唯一方法是使用绝对路径。为了获得绝对路径,您可以使用magic constant __FILE____DIR__(在PHP 5.3 +中):

$curlConfig = array(
    ...
    CURLOPT_COOKIEFILE => dirname(__FILE__). '/cookies.txt',
    CURLOPT_COOKIEJAR => dirname(__FILE__). '/cookies.txt',
    ...
);