分享、学习、提高
2015/06/24 18:32
文章作者:Enjoy 转载请注明原文链接。
在php里,正常使用curl来获取其它页面的内容,比file_get_contents稳定的多,之前有提到的curl_get_contents
function curl_get_contents($url, $timeout=1) {
    if (!function_exists('curl_init')) {
        $result = file_get_contents($url);
    } else {
        $curlHandle = curl_init();
        curl_setopt($curlHandle, CURLOPT_URL, $url);
        curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curlHandle, CURLOPT_TIMEOUT, $timeout);
        $result = curl_exec($curlHandle);
        curl_close($curlHandle);
    }
}

一直跑的很好。

今天碰到一个问题,有一个站点,浏览器找开正常,但用这个函数好像访问不到内容。

排查了下,发现服务端接收到的是这样的:
点击在新窗口中浏览此图片

Server Error in '/' Application.

Value cannot be null.
Parameter name: input

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentNullException: Value cannot be null.
Parameter name: input

看起来像是这个站点的问题,但是用浏览器访问是正常的。

用file_get_contents试了下,正常。
直接在linux下wget,curl都正常。

猜测是curl的参数问题,

测试几次后,找到问题所在,问题解决。

加上如下代码
curl_setopt($curlHandle, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);


那看来是,没有user_agent时,这个站点就会报异常,加上user_agent后,就访问正常了。
发表评论
表情
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
昵称   密码   游客无需密码
网址   电邮   [注册]
               

验证码 不区分大小写