leafs/fetch

简单的PHP http客户端

v0.1 2021-06-04 17:47 UTC

This package is auto-updated.

Last update: 2024-09-22 19:06:33 UTC


README



Fetch



Leaf Fetchs

Latest Stable Version Total Downloads License

为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方法命名的快捷方法,如getpostputpatch等。

$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和我们的任何包,或查看贡献页面以了解贡献的方式。

对于所有现有的现金/代码贡献者,我们都爱你们❤️

现金贡献者

🤯 链接/项目