php curl获取接口数据丨技术开发分享录

php curl获取接口数据

{{ detail.nickname }}

转载 翻译 {{ formatTime(detail.create_time) }} 字数 {{ detail.content && detail.content.length }} 阅读 {{ detail.read_num }} {{ formatTag(v) }}

"前端之所以要这样做,也是临时的,就是要拿到数据,但通过API接口地址很多都是跨域的,因为前端写的都是静态页,使用ajax来获取数据的,以Chrome Browser为例\n如果没有,下载这个允许跨域扩展,又不想麻烦后台,那就很蛋疼了\n![](https://segmentfault.com/img/bVTMLl?w=739&h=144)\n\n\n基本前端都要有服务器环境,不是node 就是 php 或 java 之类的,这里以php为例,讲下curl之转接口,不域跨\n\n首先项目文件夹要在服务器根目前里,也就是通常说的www目录或htdoc目前,这个应该都知道\n\n下面先写一个简单的入门代码,假设直接请求test2.php是跨域的,而test.php是本地服务器的\ntest.html\n\n```html\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Document</title>\n</head>\n<body>\n    <script>\n    var xhr = new XMLHttpRequest();\n    xhr.open('get', 'test.php', true);\n    xhr.responseType = 'json';\n    xhr.send(null);\n    xhr.onreadystatechange = function() {\n        if(xhr.status===200 && xhr.readyState===4) {\n           console.log(xhr.response)\n        }\n    }\n    </script>\n</body>\n</html>\n```\n![](https://segmentfault.com/img/bVTMT3?w=611&h=150)\ntest.php (使用curl拿test2.php的数据)\n\n```php\n<?php\n\n$curl = curl_init();\n\ncurl_setopt($curl, CURLOPT_URL, 'localhost:8080/test/test2.php');\ncurl_setopt($curl, CURLOPT_HEADER, 0); \t\t\t// 0:不返回头信息\ncurl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\t// 1:内容以变量的形式存储,而不直接输出\n\n$data = curl_exec($curl);\ncurl_close($curl);\n\necho $data;\n```\n\ntest2.php ( 原数据 )\n\n```php\n<?php\n\nheader('content-type: application/json');\n\n$data = [\n\t'name' => 'tom',\n\t'age' => 24,\n\t'score' => 98,\n\t'class' => '502',\n\t'gender' => 'male'\n];\n\necho json_encode($data);\n```\n这样拿到数据,做完后再替换成正确的接口地址。。\n\n进一步,如果有多个请求呢?\n那我们就需要一个用于识别的url参数了,这里使用action测试\ntest.html\n\n```html\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Document</title>\n</head>\n<body>\n    <script>\n    function xhr(opts) {\n        var xhr = new XMLHttpRequest();\n        xhr.open(opts.type, opts.url, true);\n        xhr.responseType = opts.dataType;\n        xhr.send(null);\n        xhr.onreadystatechange = function() {\n            if(xhr.status===200 && xhr.readyState===4) {\n              opts.success(xhr.response);\n            }\n        }\n    }\n    xhr({\n        type: 'get',\n        dataType: 'json',\n        url: 'test.php?action=grade',\n        success: function(res) {\n            console.log(res);   // {name: \"tom\", age: 24, score: 98, class: \"502\", gender: \"male\"}\n        }\n    });\n    xhr({\n        type: 'get',\n        dataType: 'text',\n        url: 'test3.php?action=test',\n        success: function(res) {\n            console.log(res); // [1,2,3,4,5]\n        }\n    });\n    </script>\n</body>\n</html>\n```\ntest.php\n\n```php\n<?php\nfunction curl($url) {\n\t$curl = curl_init();\n\tcurl_setopt($curl, CURLOPT_URL, $url);\n\tcurl_setopt($curl, CURLOPT_HEADER, 0); \t\t\t// 0:不返回头信息\n\tcurl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\t// 1:内容以变量的形式存储,而不直接输出\n\t$data = curl_exec($curl);\n\tcurl_close($curl);\n\treturn $data;\n}\n$action = $_GET['action'];\nswitch ($action) {\n\tcase 'grade':\n\t\techo curl('localhost:8080/test/test2.php');\n\t\tbreak;\n\tcase 'test':\n\t\techo curl('localhost:8080/test/test3.php');\n\t\tbreak;\n}\n```\ntest3.php\n\n```php\n<?php\n$data = Array(1,2,3,4,5);\necho json_encode($data);\n```\n\n除了curl外,有些情况也可以使用file_get_contents来实现的,有兴趣的可以去了解下。\n\ncurl相关参数,请参照:http://php.net/manual/zh/book.curl.php"
PS:写作不易,如要转裁,请标明转载出处。

如果此篇对您有帮助,可小额赞助,以兹鼓励!

猜你想看