为了账号安全,请及时绑定邮箱和手机立即绑定

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

正在回答

8 回答

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

0 回复 有任何疑惑可以回复我~
#1

流浪滴汪汪汪

我猜是服务器是为了防止爬虫之类的不停地访问影响正常使用,所以对于不是浏览器访问的访问都不予处理了吧。而加上了USERAGENT,服务就会认为你是一个来自浏览器的访问,是一个正常的访问,就可以正常使用了。
2016-12-21 回复 有任何疑惑可以回复我~

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

1 回复 有任何疑惑可以回复我~
#1

慕沐2779526

想问一下,为什么加上这句就OK了呢?
2015-09-30 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

首先我用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); // 关闭资源
?>


1 回复 有任何疑惑可以回复我~

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

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
PHP中的数据传输神器cURL
  • 参与学习       34277    人
  • 解答问题       218    个

cURL就是这样的利器,可以帮助大家操作各种网络资源

进入课程
意见反馈 帮助中心 APP下载
官方微信