问答详情
源自:2-3 用cURL调用WebService获取天气信息

未将对象引用设置到对象的实例?我也是这个问题

提问者:快乐分享 2014-11-07 11:27

个回答

  • 慕沐2779526
    2015-09-30 10:58:33

    二楼的可以解决,但是不知道为什么!

  • 霍比特人好郁闷
    2014-11-26 22:16:50

    添加 curl_setopt($curlobj, CURLOPT_USERAGENT, "user-agent:Mozilla/5.0 (Windows NT 5.1; rv:24.0) Gecko/20100101 Firefox/24.0");  即可

  • 窒息的风
    2014-11-10 09:56:44

    curl_setopt ( $curl_obj, CURLOPT_USERAGENT, 浏览器UA可自行填写);

  • 窒息的风
    2014-11-10 09:52:38

    首先我用html的form测试可以获取到信息,说明服务端没有问题

    然后我获取自己写的一个1.php,可以抓取到POST信息,说明代码一般是可以抓取到信息的。

    猜测问题出在服务端对header进行了检测,

    那么尝试加上user-agent

    添加以下代码

    curl_setopt ( $curl_obj, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

    成功获取到数据。


    完整代码如下:

    <?php
        $data = 'theCityName=北京';
        $curl_obj = curl_init(); // 初始化
        $url = 'http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName';
        $url2 = 'http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportProvince';
        $url3 = 'http://localhost/1110/1.php';
        curl_setopt($curl_obj, CURLOPT_URL, $url); // 设置访问URL
        curl_setopt ( $curl_obj, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
        curl_setopt($curl_obj, CURLOPT_HEADER, 0); // 启用时会将头文件的信息作为数据流输出
        curl_setopt($curl_obj, CURLOPT_RETURNTRANSFER, 1); // 执行之后不直接打印出来
        // curl_setopt($curl_obj, CURLOPT_POST,count($data));
        curl_setopt($curl_obj, CURLOPT_POST, 1); // 启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。
        curl_setopt($curl_obj, CURLOPT_POSTFIELDS, $data); // 全部数据使用HTTP协议中的"POST"操作来发送。要发送文件,在文件名前面加上@前缀并使用完整路径。这个参数可以通过urlencoded后的字符串类似'para1=val1&para2=val2&...'或使用一个以字段名为键值,字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-data。
        curl_setopt($curl_obj, CURLOPT_HTTPHEADER, array(
                'Content-Type: application/x-www-form-urlencoded;',
                'Content-length:'.strlen($data)
                ));
        $rtn = curl_exec($curl_obj); // 执行
        if (!curl_errno($curl_obj)) {
            echo $rtn;
        } else {
            echo 'Curl error: ' . curl_errno($curl_obj);
        }
        curl_close($curl_obj); // 关闭资源
    ?>


  • 窒息的风
    2014-11-10 09:18:48

    我这里也是这个问题,用form提交的post就没有这个问题.