sndsgd / http
改进的PHP HTTP
v1.0.0
2019-07-30 09:59 UTC
Requires
- php: >=7.1.0
- sndsgd/error: ~0.0.4
- sndsgd/form: >=0.1.3
- sndsgd/fs: >=0.4.0
- sndsgd/util: >=1.1.0
Requires (Dev)
- guzzlehttp/psr7: ^1.3
- mikey179/vfsstream: 1.6.4
- php-mock/php-mock-phpunit: ^2.2.0
- phpunit/phpunit: ^7.5.14
- satooshi/php-coveralls: ~1.0
README
改进的PHP HTTP。
要求
您需要 PHP >= 7.1 来使用此库,但是建议使用PHP的最新稳定版本。
安装
使用Composer安装sndsgd/http
。
用法
此库旨在改进PHP处理HTTP请求的方式,主要通过对请求参数的处理过程进行简化。
改进的请求参数解码器
要尝试解码器,您可以使用位于bin/request-demo.php
的脚本与PHP内置的web服务器进行实验。
php -S localhost:8000 bin/request-demo.php
现在,您可以使用任何HTTP客户端向https://:8000发送请求。在下面的示例中,我们将使用httpie。要输出正在进行的请求的信息,只需在下面的任何命令中追加-v
即可。
查询字符串解码器
在许多查询参数实现中,您不需要使用括号来表示多个值,但使用PHP时则需要。为了与内置PHP解码器兼容,您可以使用括号继续。
http https://:8000/query a==1 a==2 a[]==💩
结果
"$_GET": { "a": [ "💩" ] }, "sndsgd": { "a": [ "1", "2", "💩" ] } }
请求体解码器
PHP内置的体解码器仅处理multipart/form-data
和application/x-www-form-urlencoded
内容类型,用于POST
请求。此库作为polyfill来添加application/json
到该列表,并允许解码任何请求方法的请求体。默认情况下,POST
请求将由内置PHP解码器处理,但是,您可以通过在php.ini
中设置enable_post_data_reading = Off
来禁用此功能。
内置解码器不会解码此urlencoded
PATCH
请求的体
http --form PATCH https://:8000/body a=1 b=2 c[d]=3a
结果
{ "$_POST": [], "$_FILES": [], "sndsgd": { "a": "1", "b": "2", "c": { "d": "3" } } }
上传的文件
使用$_FILES
而不是,使用sndsgd/http
上传的文件作为请求体的其他参数作为对象包含。
http --form POST https://:8000/body a=1 file@README.md
结果
{ "$_POST": { "a": "1" }, "$_FILES": { "file": { "name": "README.md", "type": "", "tmp_name": "/private/var/folders/2b/mtmy5wk56jx13vjgqpydc3nr0000gn/T/php9DTXiq", "error": 0, "size": 2766 } }, "sndsgd": { "a": "1", "file": { "filename": "README.md", "contentType": "text/x-markdown", "realContentType": "text/plain", "size": 2766, "tempfile": "/private/var/folders/2b/mtmy5wk56jx13vjgqpydc3nr0000gn/T/php9DTXiq" } } }