PHP 使用 Guzzle 发送 HTTP 请求

作者: 怀老师 | 来源:发表于2020-06-13 12:16 被阅读0次

    需求:发布消息时,要做一次HTTP请求,使用POST方式且URI带QUERY_STRING,BODY为JSON的格式传输数据。
    通信方式:HTTP
    HTTP Method:POST
    Content-Type:无论实际的内容是纯文本字符串、JSON数据还是 x-www-form-urlencoded 编码的键值对,内容类型(Content-Type)必须设置为 text/plain。

    本来选用的Laravel7新增的HTTP工具类,但是奈何现在版本不支持,这里又不想自己造轮子,所以使用了Guzzle的Client类来发送请求。

    发送请求

    先上代码:

    use GuzzleHttp\Client;
    public static function sendNotice($b,$c,$params)
        {
            $url = a.com?b=$b&c=$c";
    
            $headers = ["Content-Type"=>"text/plain"];
            $client = new Client();
            $client->request('POST',$url,['json' => $params,'headers'=>$headers]);
    
        }
    

    可以看到,在request方法里,第一个参数可以选择请求方式,POST或者GET。第二个参数设置请求地址,可以带上query_string,也就是GET参数。第三个参数是设置数据传输的东西,比如我这里设置了header头,和body里的$params数据。

    当使用json做键时,Guzzle会自动把param转化为json_encode的json对象。当我们使用form_params做键时,Guzzle会把params转化为http_build_query的字符参数。这里还是建议用Json,因为http_build_query会丢掉空值,而且连key一起丢掉。

    第二个header一定要是headers做key,注意。其他的key是不生效的,这个s很重要。

    接收请求

    我在本地另起了一个test项目。改host为a.com,然后在项目根目录增加index.php。
    代码如下:

    <?php
    //获取请求头及一些请求信息
    //file_put_contents('1.txt', json_encode($_SERVER));
    //获取body里的流信息
    file_put_contents('1.txt', file_get_contents('php://input'));
    //file_put_contents('1.txt', json_encode($_GET));//这里也能用$_REQUEST
    
    

    PHP发送请求和接收打印请求就完成了。

    扩展

    Guzzle是有异步并发请求能力的,当我们有多个请求时,可以合并请求,在then()回调函数里处理。请求时间为最长的那个请求耗费的时间。

    相关文章

      网友评论

        本文标题:PHP 使用 Guzzle 发送 HTTP 请求

        本文链接:https://www.haomeiwen.com/subject/fuyatktx.html