我正在尝试从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";
我甚至没有收到错误。 为什么我没有从第一个网址获得任何回复,我该如何解决?
答案 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之前关闭$ curlcurl_close($curl);
希望这会对你有所帮助。