zoukankan      html  css  js  c++  java
  • php之接口内curl请求其他接口

    今天遇到一个需要写curl的需求,情况是这样的:

    同一应用的A系统(购物系统),B系统(答题系统)相互独立,用户数据全部存在于A系统的数据库中,

    现在处于B系统的某项操作中,需要在B系统中验证当前请求的人是不是此应用的会员,要验证是不是该应用的

    会员,当然是要拿当前用户的标识到数据库比对啊,可是数据库在A系统里啊,当时我就想到了curl,画个图吧:

    其实说白了,就是模拟http请求,因为不同于前端,可以通过ajax或者其他方式直接发起http请求,后端只好通过curl来

    模拟这种请求,以便达到和前端相同的效果。

    于是百度搜了一个php的curl方法,封装了一下:

    public static function curl_post($url,$array){
            $curl = curl_init();
            //设置提交的url
            curl_setopt($curl, CURLOPT_URL, $url);
            //设置post方式提交
            curl_setopt($curl, CURLOPT_POST, 1);
            //设置post数据
            curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($array));
            //执行命令
            $data = curl_exec($curl);
            //关闭URL请求
            curl_close($curl);
            //获得数据并返回
            return $data;
         }

    然后就愉快地调用了:

         $array = array('open_id'=>$openid);
            $url = dr_var("verify");
            $res = $this->curl_post($url,$array);

    这里是在B系统接口里面模拟请求了A系统的一个verify接口,用来审核用户身份,然后根据审核结果决定B系统

    接口向外返回什么。

    最后跑B系统接口的时候,却发现,返回的除了B系统接口返回值之外,还夹杂着A系统接口(verify)的返回值,

    一时间很是不解,到处看verify接口返回值那里出了什么错,exit(json_encode(array("a"=>a)))不奏效,于是换成

    return array("a"=>a);还是不奏效,又换成var_dump(array("a"=>a));还是不行!!!依旧返回两个接口的返回值。

    后来,后来,一句一句地调试封装的curl函数,发现上面红字那块就已经将verify接口的值直接打印出来了,

    于是百度关键字:curl 不直接输出;哗啦啦,出来一大串相关信息,随便打开一条,找到了答案,原来是curl少

    设置了一个参数:

    //获取数据不直接输出
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    最终问题解决了,也算是get到了php的curl参数设置的一个小知识点~~~

  • 相关阅读:
    【JS】修改字体
    【git】.gitignore文件常用设置
    【CSS】让textarea在div里水平垂直都居中的三种办法
    【JS】随着进度条进展,逐个显示li节点
    【MySQL】The server time zone value 'xxxxxx' is unrecognized or represents more than one time zone 解决方案
    浅谈Web前端开发中的Touch事件
    [转]PostgreSQL与MySQL比较
    RDLC:An error occurred during local report processing
    [转]让你的PHP更安全
    [转]Win7或Windows server 2008中IIS7支持ASP+Access解决方法
  • 原文地址:https://www.cnblogs.com/eco-just/p/9261367.html
Copyright © 2011-2022 走看看