CURL可以在命令行中工作,但不能在PHP脚本中工作


CURL works in command line but not in the PHP script

这里已经问过了,但是提问者没有给出足够的相关日志和代码,所以我无法使用它来解决我的问题。cookie中没有&符号(&),所以这肯定不是问题。

所以,我可以在命令行中使用curl成功打开一个网页,使用这个命令字符串:

curl "https://example.com" -H "cookie: wpfront-notification-bar-landingpage=1; gsScrollPos=; PHPSESSID=qhdkf5id0mnjcjadeuadsfkfp3; _gat=1; arp_scroll_position=877; _drip_client_1350063=vid^%^253D57a7eb508b0f013477ed126e9005972f^%^2526pageViews^%^253D8^%^2526sessionPageCount^%^253D2^%^2526lastVisitedAt^%^253D1478973050670^%^2526weeklySessionCount^%^253D2^%^2526lastSessionAt^%^253D1478972975034^%^2526form^%^255B2550^%^255D^%^255Bauto_open^%^255D^%^253D1478960007^%^2526form^%^255B2550^%^255D^%^255Bmanual_close^%^255D^%^253D1478960015; _ga=GA1.2.660807988.1478959677"

但是我的PHP脚本应该工作完全相同,不工作。我试着添加cookie头,也添加cookie马上,但它只是相同的。

function request($url) {
    $ch = curl_init();
    //curl_setopt($ch, CURLOPT_TIMEOUT_MS, 2000);
    curl_setopt_array($ch, array(
        CURLOPT_URL => $url,
        CURLOPT_SSL_VERIFYPEER      =>  0,
        CURLOPT_RETURNTRANSFER      =>  1,
        CURLOPT_CONNECTTIMEOUT      =>  10,
        CURLOPT_TIMEOUT             =>  10,
        CURLOPT_ENCODING            =>  "gzip",
        CURLOPT_FOLLOWLOCATION      =>  TRUE,
        CURLOPT_HEADER              =>  TRUE,
        CURLOPT_USERAGENT           =>  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36",
        CURLOPT_HTTPHEADER          => array("cookie: wpfront-notification-bar-landingpage=1; gsScrollPos=; PHPSESSID=qhdkf5id0mnjcjadeuadsfkfp3; _gat=1; arp_scroll_position=877; _drip_client_1350063=vid^%^253D57a7eb508b0f013477ed126e9005972f^%^2526pageViews^%^253D8^%^2526sessionPageCount^%^253D2^%^2526lastVisitedAt^%^253D1478973050670^%^2526weeklySessionCount^%^253D2^%^2526lastSessionAt^%^253D1478972975034^%^2526form^%^255B2550^%^255D^%^255Bauto_open^%^255D^%^253D1478960007^%^2526form^%^255B2550^%^255D^%^255Bmanual_close^%^255D^%^253D1478960015; _ga=GA1.2.660807988.1478959677"),
        CURLOPT_VERBOSE             => 1,
    ));
    $response = curl_exec($ch);
    $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $header = substr($response, 0, $header_size);
    $html = substr($response, $header_size);
    echo $html;
    libxml_use_internal_errors(TRUE);
    $dom = new DOMDocument();
    if (strpos($url, 'feed') !== false) {
        $dom->loadXML($html);
    } else {
        $dom->loadHtml($html);
    }
    return new DOMXPath($dom);
    libxml_clear_errors(); // to clear memory up
}
request("http://example.com");

如何通过PHP脚本成功运行curl ?为什么它在命令行中工作,而不是在PHP脚本中?我做错了什么吗?

我用shell_exec()代替。

echo shell_exec("curl https://example.com");

似乎curl库和站点页面有一个bug。这个bug并不是始终如一的。有时命令行curl需要cookie,但大多数情况下不需要。

好吧,我没有时间调试curl,所以如果shell_exec()工作,我可以接受它。

相关文章: