php guzzlehttp,PHP 使用 Guzzle 发送 HTTP 请求

需求:发布消息时,要做一次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会自动把

math?formula=param%E8%BD%AC%E5%8C%96%E4%B8%BAjson_encode%E7%9A%84json%E5%AF%B9%E8%B1%A1%E3%80%82%E5%BD%93%E6%88%91%E4%BB%AC%E4%BD%BF%E7%94%A8form_params%E5%81%9A%E9%94%AE%E6%97%B6%EF%BC%8CGuzzle%E4%BC%9A%E6%8A%8Aparams转化为http_build_query的字符参数。这里还是建议用Json,因为http_build_query会丢掉空值,而且连key一起丢掉。

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

接收请求

我在本地另起了一个test项目。改host为a.com,然后在项目根目录增加index.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()回调函数里处理。请求时间为最长的那个请求耗费的时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值