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中的使用curl发送请求(GET请求和POST请求)