php发送http请求(重要)

Posted 代码当酒喝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php发送http请求(重要)相关的知识,希望对你有一定的参考价值。

有时候php程序需要发送请求到开放的api平台等

方式一:GuzzleHttp

文档

https://guzzle-cn.readthedocs.io/

composer下载

composer require guzzlehttp/guzzle

基本代码

 // 申明一个请求类,并指定请求的过期时间
        $client = new Client(['timeout' => 5]);
        // 得到请求地址
        //$url = config('gaode.geocode');
        $url =  $url = 'http://restapi.amap.com/v3/geocode/geo?key=0635894d32ee6dee3ae4978733e137e7&address=%s&city=%s';
        $url = sprintf($url, $model->fang_addr, $model->fang_province);
        // 发起请求
        $response = $client->get($url);
        $body = (string)$response->getBody();
        $arr = json_decode($body, true);
        // 如果找到了对应经纬度,存入数据表中
        if (count($arr['geocodes']) > 0) {
            $locationArr = explode(',', $arr['geocodes'][0]['location']);
            $model->update([
                'longitude' => $locationArr[0],
                'latitude' => $locationArr[1]
            ]);
        }

注意事项

请求https报错解决方案
‘verify’ => false:不检查证书,guzzle默认是检查证书的
$client = new Client([‘timeout’ => 5,‘verify’ => false]);
这个超时时间也是很有必要的,请求超过5秒没反应就不管了。

其次如果第三方接口中如果有状态码,可以根据状态码判断请求成功还是失败
下面是高德地图示例

if (count($arr['geocodes']) > 0) {
            $locationArr = explode(',', $arr['geocodes'][0]['location']);
            $model->update([
                'longitude' => $locationArr[0],
                'latitude' => $locationArr[1]
            ]);
        }

其次 第三方接口能请求http 就http 在我们的程序中发送https的请求会明显感觉到比https慢

方式二:file_get_contents

public function index(){
        //获取当前月份
        $month = date('m', time());
        //获取当然日期
        $day = date('d', time());
        // 组装api_url
        $api_url = "https://baike.baidu.com/cms/home/eventsOnHistory/" . $month . '.json';
        //获取百度接口数据
        $data = file_get_contents($api_url);
        //对 JSON 格式的字符串进行解码,并转换为 PHP 变量。
        $json_baidu = json_decode($data, true);
        //查看历史上的今天  查看历史上的本月  halt($json_baidu[$month]);
        halt($json_baidu[$month][$month . $day]);
    }

方式三:待续

以上是关于php发送http请求(重要)的主要内容,如果未能解决你的问题,请参考以下文章

php代码审计7审计csrf漏洞

转:PHP中的使用curl发送请求(GET请求和POST请求)

PHP必用代码片段

超级有用的9个PHP代码片段

php如何通过get方法发送http请求,并且得到返回的参数

php 中发送get请求,后台无法获取