从重定向的URL获取源HTML

时间:2015-01-27 15:50:35

标签: php curl

我正在尝试从html页面获取用户名。 但是,此页面执行重定向,我的函数返回NULL。

function getSGname($steamid) {
/*
 * Get the user's name from SteamGifts.com
 *
 * @param bigint $steamid SteamID64
 * @return false|string SteamGifts user's name
 *
 */
    set_time_limit('30');

    // Include DOM library
    include('/lib/simple_html_dom.php');

    # create object
    $html = new simple_html_dom();

    // Build the URL to the user's SteamGifts profile
    $url = "http://www.steamgifts.com/user/id/$steamid";

    #### CURL BLOCK ####

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);

    $content = curl_exec($curl);
    curl_close($curl);

    # note the variable change.
    $string = str_get_html($content);

    // Some code here to get certain div from the string
    // ...

    return $string;
}

echo "name: " . getSGname('76561197962290563');

现在,如果我将网址替换为其他网站,则可以正常运行。

$url = "http://www.bundlequest.com/index.php";

我甚至没有收到错误。 为什么我没有从第一个网址获得任何回复,我该如何解决?

3 个答案:

答案 0 :(得分:2)

这可能是因为该网站想要使用Cookie,因此网站会重定向,因为它无法设置Cookie文件。

替换它:

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);

with:

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_AUTOREFERER, true);
curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookie.txt');

您需要CURLOPT_COOKIEJAR选项来设置Cookie文件。 CURLOPT_MAXREDIRS是允许的重定向的最大值。 10应该就够了。

如果仍然出现错误,您可以使用:

if($errno = curl_errno($curl)) {
    echo $errno;
}

这将显示错误代码

答案 1 :(得分:0)

Curl会自动跟踪重定向。您需要将CURLOPT_FOLLOWLOCATION设置为false并手动处理重定向。

答案 2 :(得分:0)

正如Paul所说,解决方案是将CURLOPT_FOLLOWLOCATION设置为false。

curl_error上的警告:在使用:

显示curl_error之前关闭$ curl
curl_close($curl);

希望这会对你有所帮助。