第一次抓别人网站数据,用postman直接请求可以获取到返回数据,通过代码的方式就一直报错,php

发布于 2022-09-11 19:09:58 字数 1623 浏览 22 评论 0

最近需要抓取下KFC的一些数据

通过postman把请求地址和参数都拿过来后可以返回数据
图片描述

我就天真的以为可以通过代码直接发送一个post请求即可

但是通过php的curl模拟请求后,返回的一直是服务器异常
图片描述

刚开始时好像成功过,但现在一直都是报这个,我用的就是一个普通post请求封装方法,代码如下:


  public function kfc_post($url, $data)
  {
    $data['deviceId'] = '819ce973-1ff8-4dfc-8436-4e0e0e1efb6e';
    $data['brower_id'] = 'unique-test-dc6d945b-d504-45f7-ad94-8eaacb590fcf';
    $params = http_build_query($data);
    $headers = [
      'Accept'  => 'application/json, text/plain, */*',
      'Content-Type' => 'application/x-www-form-urlencoded',
      'Origin'  =>  'http://order.kfc.com.cn',
      'Referer' =>  'http://order.kfc.com.cn/mwos/store',
      'User-Agent' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'
    ];
    // 模拟提交数据函数
    $curl = curl_init(); // 启动一个CURL会话
    curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
    curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
    curl_setopt($curl, CURLOPT_POSTFIELDS, $params); // Post提交的数据包
    curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
    curl_setopt($curl, CURLOPT_HTTPHEADER,$headers);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回

    $content = curl_exec($curl); // 执行操作
    curl_close($curl); // 关闭CURL会话

    return json_decode($content, true);
  }

前后修改过几次,但基本就是这样,依然请求失败,没玩过抓别人网站的数据,是不是哪里有疏忽,比如cookie之类的,我尝试带cookie请求,但还是不行,所以就不知道为什么了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

找回味觉 2022-09-18 19:09:58

后来重新写了下post方法就可以了,感觉方法都是一样的啊

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文