使用cURL在多个请求中多次切换用户代理

时间:2014-04-03 13:05:18

标签: php curl

所以我使用cURL登录这里的网站,并欺骗用户代理。我有两个常量:一个名为IOS,一个是iOS用户代理,一个名为CHROME,是一个Chrome用户代理。这是登录的代码:

    public function signIn($username, $password)
    {
        $url = "https://www.site.net/post/Index.page"; 
        $cookie = "cookie.txt"; 

        $postdata = "screenName=$username&kclq=$password&submitEvent=1&TCNK=authenticationEntryComponent&enterClicked=true&ajaxSupported=yes"; 

        $ch = curl_init(); 
        curl_setopt($ch, CURLOPT_URL, $url); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
        curl_setopt($ch, CURLOPT_USERAGENT, IOS); 
        curl_setopt($ch, CURLOPT_TIMEOUT, 200); 
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
        curl_setopt($ch, CURLOPT_COOKIE, 1);
        curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
        curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
        curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); 
        curl_setopt($ch, CURLOPT_REFERER, "https://www.site.net/Index.page"); 

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

        curl_close($ch);
    }

在后续请求中,我想将用户代理从IOS更改为CHROME,但它似乎无法正常工作(我更改为CHROME和网站仍然提供移动页面)。当我运行此请求时:

curl -L -X POST -b "cookie.txt" --user-agent " . CHROME . " https://site.net

它不提供桌面网站,而是提供移动桌面网站。是否可以在登录时更改用户代理?

2 个答案:

答案 0 :(得分:1)

服务器也会根据cookie检测您的访问。因此,在函数signIn()内的第一行,要么清空cookie文件,要么删除它。

例如:

file_put_contents($cookie, "");

或删除它,curl将创建一个新的:

unlink($cookie);

答案 1 :(得分:0)

网站似乎在登录时将用户代理保存为全局会话变量。在这种情况下,不会,在以后的curl请求中更改用户代理不会更改会话变量中的用户代理。