leafs / fetch
简单的PHP http客户端
v0.1
2021-06-04 17:47 UTC
Requires
- ext-curl: *
README
Fetch
Leaf Fetchs
为PHP制作网络请求的干净、简单、开发者友好的接口。Fetch基于curl,并使用Unirest PHP和与Axios相似的API的元素。所有这些结合使Fetch成为制作PHP网络请求的最佳和最简单的方式。
fetch示例
use function Leaf\fetch; $res = fetch("https://jsonplaceholder.typicode.com/todos/"); echo json_encode($res->data);
您还可以使用fetch类
use Leaf\Fetch; $res = Fetch::request([ "url" => 'https://jsonplaceholder.typicode.com/todos/1', ]); echo json_encode($res->data);
或者使用Leaf 3的函数模式
$res = fetch("https://jsonplaceholder.typicode.com/todos/"); echo json_encode($res->data);
安装
您可以使用Leaf CLI快速安装leaf fetch
# latest stable leaf install fetch # dev version leaf install fetch@dev-main
或者使用composer
# latest stable composer require leafs/fetch # dev version composer require leafs/fetch dev-main
fetch
方法
Leaf fetch提供了fetch方法作为制作HTTP请求的简便方式。这允许您快速进行请求,而无需调用整个fetch类,甚至无需构建自己的请求数组。
// make a get request $res = fetch("https://jsonplaceholder.typicode.com/todos/"); // make a post request $res = fetch("https://jsonplaceholder.typicode.com/posts", [ "title" => "foo", "body" => "bar", "userId" => 1, ]); // build a custom request array $res = fetch([ "method" => "GET", "url" => 'https://jsonplaceholder.typicode.com/todos/1', "data" => [ "firstName" => 'Fred', "lastName" => 'Flintstone' ] ]); // get response body echo json_encode($res->data);
Fetch
类
fetch类包含制作网络请求所需的所有选项和方法。
baseUrl
您可能已经注意到,上述所有请求都需要我们输入一个长的URL来发起请求,但是,我们可以添加一个基本URL,这样我们就不必一次次输入。
Fetch::baseUrl("https://jsonplaceholder.typicode.com");
然后您可以使用以下方式进行请求
// make a get request $res = fetch("/todos"); // make a post request $res = fetch("/posts", [ "title" => "foo", "body" => "bar", "userId" => 1, ]); // use the get shortcut method $res = Fetch::get("/todos/10"); // echo response echo json_encode($res);
快捷方法
fetch类包含以HTTP方法命名的快捷方法,如get
、post
、put
、patch
等。
$res = Fetch::post("/posts", [ "title" => "foo", "body" => "bar", "userId" => 2, ]); $res = Fetch::get("/todos/10"); Fetch::delete("/todos/10"); // ...
request
如您所看到的,fetch类还提供了一个request
方法,该方法是fetch
函数的底层实现。request
允许您使用所需数据手动构建请求对象。
use Leaf\Fetch; $res = Fetch::request([ "method" => "GET", "url" => "https://jsonplaceholder.typicode.com/todos", ]); echo json_encode($res->data);
请求对象
这是用于构建要发送的请求的数组。可用的字段有
[ // `url` is the server URL that will be used for the request "url" => null, // `method` is the request method to be used when making the request "method" => "GET", // default // `baseURL` will be prepended to `url` unless `url` is absolute. // It can be convenient to set `baseURL` for an instance of axios to pass relative URLs // to methods of that instance. "baseUrl" => "", // `transformRequest` allows changes to the request data before it is sent to the server // This is only applicable for request methods 'PUT', 'POST', 'PATCH' and 'DELETE' // The last function in the array must return a string or an instance of Buffer, ArrayBuffer, // FormData or Stream // You may modify the headers object. // "transformRequest" => function ($data, $headers) { // // Do whatever you want to transform the data // return $data; // }, // `transformResponse` allows changes to the response data to be made before // it is passed to then/catch // "transformResponse" => function ($data) { // // Do whatever you want to transform the data // return $data; // }, // `headers` are custom headers to be sent "headers" => [], // `params` are the URL parameters to be sent with the request // Must be a plain object or a URLSearchParams object "params" => [], // `paramsSerializer` is an optional function in charge of serializing `params` // (e.g. https://npmjs.net.cn/package/qs, https://api.jqueryjs.cn/jquery.param/) // "paramsSerializer" => function ($params) { // return Qs.stringify($params, ["arrayFormat" => "brackets"]); // }, // `data` is the data to be sent as the request body // Only applicable for request methods 'PUT', 'POST', 'DELETE , and 'PATCH' // When no `transformRequest` is set, must be of one of the following types: // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams // - Browser "only" => FormData, File, Blob // - Node "only" => Stream, Buffer "data" => [], // `timeout` specifies the number of seconds before the request times out. // If the request takes longer than `timeout`, the request will be aborted. "timeout" => 0, // default is `0` (no timeout) // `withCredentials` indicates whether or not cross-site Access-Control requests // should be made using credentials "withCredentials" => false, // default // `adapter` allows custom handling of requests which makes testing easier. // Return a promise and supply a valid response (see lib/adapters/README.md). // "adapter" => function ($config) { // /* ... */ // }, // `auth` indicates that HTTP Basic auth should be used, and supplies credentials. // This will set an `Authorization` header, overwriting any existing // `Authorization` custom headers you have set using `headers`. // Please note that only HTTP Basic auth is configurable through this parameter. // For Bearer tokens and such, use `Authorization` custom headers instead. "auth" => [], // `responseType` indicates the type of data that the server will respond with // options "are" => 'arraybuffer', 'document', 'json', 'text', 'stream' // browser "only" => 'blob' "responseType" => "json", // default // `responseEncoding` indicates encoding to use for decoding responses (Node.js only) // "Note" => Ignored for `responseType` of 'stream' or client-side requests "responseEncoding" => "utf8", // default // `xsrfCookieName` is the name of the cookie to use as a value for xsrf token "xsrfCookieName" => "XSRF-TOKEN", // default // `xsrfHeaderName` is the name of the http header that carries the xsrf token value "xsrfHeaderName" => "X-XSRF-TOKEN", // default // `onUploadProgress` allows handling of progress events for uploads // browser only // "onUploadProgress" => function ($progressEvent) { // // Do whatever you want with the native progress event // }, // `onDownloadProgress` allows handling of progress events for downloads // browser only // "onDownloadProgress" => function ($progressEvent) { // // Do whatever you want with the native progress event // }, // `maxContentLength` defines the max size of the http response content in bytes allowed in node.js "maxContentLength" => 2000, // `maxBodyLength` (Node only option) defines the max size of the http request content in bytes allowed "maxBodyLength" => 2000, // `validateStatus` defines whether to resolve or reject the promise for a given // HTTP response status code. If `validateStatus` returns `true` (or is set to `null` // or `undefined`), the promise will be resolved; otherwise, the promise will be // rejected. // "validateStatus" => function ($status) { // return $status >= 200 && $status < 300; // default // }, // `maxRedirects` defines the maximum number of redirects to follow in node.js. // If set to 0, no redirects will be followed. "maxRedirects" => 5, // default // `socketPath` defines a UNIX Socket to be used in node.js. // e.g. '/var/run/docker.sock' to send requests to the docker daemon. // Only either `socketPath` or `proxy` can be specified. // If both are specified, `socketPath` is used. "socketPath" => null, // default // `proxy` defines the hostname, port, and protocol of the proxy server. // You can also define your proxy using the conventional `http_proxy` and // `https_proxy` environment variables. If you are using environment variables // for your proxy configuration, you can also define a `no_proxy` environment // variable as a comma-separated list of domains that should not be proxied. // Use `false` to disable proxies, ignoring environment variables. // `auth` indicates that HTTP Basic auth should be used to connect to the proxy, and // supplies credentials. // This will set an `Proxy-Authorization` header, overwriting any existing // `Proxy-Authorization` custom headers you have set using `headers`. // If the proxy server uses HTTPS, then you must set the protocol to `https`. "proxy" => [], // `decompress` indicates whether or not the response body should be decompressed // automatically. If set to `true` will also remove the 'content-encoding' header // from the responses objects of all decompressed responses // - Node only (XHR cannot turn off decompression) "decompress" => true, // default // If false, fetch will try to parse json responses "rawResponse" => false, // CURLOPT_SSL_VERIFYHOST accepts only 0 (false) or 2 (true). // Future versions of libcurl will treat values 1 and 2 as equals "verifyHost" => true, // default "verifyPeer" => true, // default // Set additional options for curl. "curl" => [], ];
💬 保持联系
📓 学习Leaf 3
- Leaf有一个非常易于理解的文档,其中包含有关Leaf中所有操作的信息。
- 您还可以查看我们的YouTube频道,其中包含不同主题的视频教程。
- 我们还在制作codelabs,这将带来您可以遵循和贡献的实战教程。
😇 贡献
我们很高兴有你。所有贡献都受欢迎!要开始,请熟悉我们的贡献指南,您将准备好发起第一个pull request 🚀。
要报告安全漏洞,您可以通过twitter联系@mychidarko或@leafphp。我们将协调修复,并最终将解决方案提交到本项目。
代码贡献者
🤩 赞助Leaf
您的现金捐赠对我们帮助Leaf变得更好非常有帮助。您可以在open collective上赞助Leaf和我们的任何包,或查看贡献页面以了解贡献的方式。
对于所有现有的现金/代码贡献者,我们都爱你们❤️