PHP转Go系列 | HTTP请求工具的使用姿势比较

大家好,我是码农先森。

在 Web 开发中,HTTP请求工具是必不可少的。对于 PHP 程序员来说,CURL扩展是最常用的工具之一,只需安装该扩展即可自由发起HTTP请求。而在 PHP 语言中,还有一个非常实用的Composer包”guzzlehttp/guzzle”,相信大多数从事PHP开发的人都使用过。

转到 Go 语言后,一些人可能会想在Go中是否有类似的工具包呢?实话说,我从事Go语言开发这么久,也始终没有发现有类似guzzle这么好用的工具包。我认为其中的原因可能是Go语言的官方标准库中提供了”net/http”工具,它已经能够满足日常的开发需求,因此大家也就没有再去重复造轮子的兴趣了。接下来,我们将介绍在PHP语言和Go语言中的使用方法。

在php_http目录下使用Composer命令安装guzzle包。

在go_http目录下使用go mod init初始化Go项目。

这是初始化完成后的项目结构。

这次我们主要介绍最常用的两种请求方法,分别是GET请求和POST请求。

在PHP中,首先通过require加载GuzzleHttp类库,然后实例化\GuzzleHttp\Client类,并通过构造函数设置base_uri和timeout参数。接着,基于$client对象发起GET请求和POST请求。在使用过程中需要注意捕获异常情况。

从上面的代码可以看出,在PHP中发起HTTP请求使用起来还是很简单的。那么在Go中GET和POST的使用方法是怎样的呢?从下面的代码量上来看就要多很多了,先要import相关的标准库,比如net/http、encoding/json等。

其次,定义一个http.Client{}结构体的对象,并且设置HTTP请求的超时时间。然后再调用client.Get()或client.Post()方法来发起GET及POST请求。最后再使用ioutil.ReadAll方法从response.Body网络数据流中读取出HTTP请求体数据,读取完数据之后要记得关闭资源。这里需要注意的一点是response.Body网络数据流是不能重复读取,初学者这里是容易犯错的点。

从使用的角度来看,PHP比Go要简单得多,异常捕获使用try catch{}即可。反观Go中要通过if != err{}来反复判断是否有错误,略显繁琐。同时在这个例子中也可以看出,PHP的开发效率比Go要快得多。但Go的执行效率要比PHP高得多,Go作为静态语言直接打包成了二进制可执行文件,而PHP是动态语言执行时才开始解析代码。因此,两者刚好互补,学习Go也更有利于我们PHPer了解系统资源、网络请求、缓存区等的使用方式,这些在PHP中很少能接触到。

对于HTTP工具的使用姿势,最重要的是要掌握Header头各种参数的配置,比如Content-Type、Proxy、Authorization、Cookies、Cert等。我在这里附上GuzzleHttp和net/http的官方文档,方便大家更加深入的学习。

  • https://guzzle-zh-cn.readthedocs.io/
  • https://studygolang.com/static/pkgdoc/pkg/net_http.htm

推荐

  • PHP转Go系列 | 变量常量的使用姿势
  • PHP转Go系列 | 字符串的使用姿势
  • PHP转Go系列 | 数组切片的使用姿势
  • PHP转Go系列 | 条件循环的使用姿势
  • PHP转Go系列 | 类结构体的使用姿势
  • PHP转Go系列 | ThinkPHP与Gin的使用姿势
  • 基于 GoLang 实现的 IOT 物联网在线直播抓娃娃企业级项目

欢迎关注、分享、点赞、收藏、在看,我是微信公众号「码农先森」作者。

未经允许不得转载:大白鲨游戏网 » PHP转Go系列 | HTTP请求工具的使用姿势比较