php采集类Snoopy的运用和一点缺陷补充

以下文字转载自https://www.ngui.cc/el/2450663.html?action=onClick

1.需求:本公司作为C方,需要把A平台的数据通过定时任务脚本导入到B平台;

2.需求分析:

    (1)怎么获取A平台的数据?

    (2)怎么把从A平台的数据导入到B平台?

3.需求实施:

    (1)通过postman采用get方式调试A平台的开放接口,可以成功返回数据;

    (2)在php脚本,通过下载Snoopy.class.php拓展类并引入,以get方式请求接口,可以成功返回数据。

4.具体运用:

    require_once "Snoopy.class.php";//引用类

    $snoopy_class = new Snoopy;//实例化

    $url = "https://***.com/supplier/v1/orders/toBeSent  //请求的链接

    $snoopy_class->rawheaders["Authorization"] = "Bearer lzGYlRUF9PrJcKKZA%2BwAvN%2F00M";//设置token

    $snoopy_class->fetch($url);  //获取链接的返回内容

    $dingdanStr = $snoopy_class->results;//显示结果,结果是字符串

    $dingdanArr = json_decode($dingdanStr, true, 512, JSON_BIGINT_AS_STRING);//格式化返回结果

    至此,已经成功通过Snoopy类以get方式获取到第三平台的数据,非常简单!

5.遇到的问题:

    由于后期有需求,需要以post方式把B平台的数据由公司C方向A平台传送,并且在postman调试工作中需要用到raw模式submit参数,刚好又Snoopy类不支持raw模式提交参数。

     为此,post方式raw模式传输数据本人采用了php自带简单粗暴的函数方式实现,下面也做一点分享。

    $authToken = "Bearer lzGYlRUF9cKKZA%2BwAvN%";//token设置,必要的。

    $post_url  = 'https://***.com/supplier/v1/orders/send';//请求的链接

    // 需要post提交的测试数据 start    由于需要提交的参数是多维数组,需要用到postman中raw模式application/json协议。
$send_arr = array(
    "data" =>array(
      array(
"id"=>"30089",
 "no"=>"JX",
 "com"=>"百世"
),
      array(
 "id"=>"30086",
 "no"=>"A0",
 "com"=>"顺丰",
 "snItems"=>array(
          "S123456789",
           "S123456790"
                          )
)
 )
  );

     // 测试数据end 

   //重点在这里的设置,组合http网页请求:

    $context = stream_context_create(array(
    'http' => array(
        'method' => 'POST',
        'header' => "Authorization: {$authToken}\r\n".
            "Content-Type: application/json\r\n",
        'content' => json_encode($send_arr)
    )

));

   $response = file_get_contents($post_url, FALSE, $context); //发送请求

   $responseData = json_decode($response, TRUE ,512 ,JSON_BIGINT_AS_STRING); //格式化返回的数据

 
 到这里,以post方式的raw模式http传输就这样可以实现了,算是对目前版本Snoopy的一种缺陷补充吧,如果不需要用到多维数组方式传递参数,只以简单的key-value参数post/submit,那还是可以非常方便的利用Snoopy类的规则进行开发的。

   希望以上内容对遇到类似坑的phper有帮助吧~

分享到:
赞(0)