zegnat/webmention-endpoint-discovery

Webmention端点发现的一个直接实现。

v1.0 2018-08-18 21:42 UTC

This package is not auto-updated.

Last update: 2024-09-29 05:48:33 UTC


README

主要是一个思想实验,看看确切需要什么来执行Webmention端点发现。你可以单独使用这个实现,尽管将代码紧密集成到你的应用程序的其余部分可能会得到更好的结果。

在项目的许可下,你应该可以随意复制你想要使用的任何部分!甚至不需要署名——即使你被感激。

安装

通过Composer

$ composer require zegnat/webmention-endpoint-discovery

用法

$discoverer = new Zegnat\Webmention\EndpointDiscovery($httpClient, $requestFactory);
echo $discoverer->discover('https://webmention.rocks/test/1');
// https://webmention.rocks/test/1/webmention\?head=true
  • $httpClient必须是一个实现HTTPlug中定义的HttpClient的实例。这(希望很快)将被PSR-18所取代。
  • $requestFactory必须是一个实现PHP-FIG中定义的RequestFactoryInterface的实例,作为PSR-17

安全端点

注意:这个功能是非常实验性的。在使用之前请先查阅代码。

可能有一些奇怪的问题是由Webmention发送者在本地机器上发布提及而触发的。Webmention规范建议发送者避免向localhost发送Webmention。这个库可以做到这一点。

EndpointDiscovery::secureDiscover将返回null,不仅当找不到端点时,而且当找到的端点的主机DNS解析到私有或保留范围内的IP地址时。当所有找到的IP地址都被认为是OK时,该方法将返回如下数组

$discoverer = new Zegnat\Webmention\EndpointDiscovery($httpClient, $requestFactory);
var_export($discoverer->secureDiscover('https://webmention.rocks/test/1'));
// array (
//   'url' => 'https://webmention.rocks/test/1/webmention?head=true',
//   'host' => 'webmention.rocks',
//   'ips' =>
//   array (
//     0 => '173.230.155.197',
//   ),
// )

建议Webmention发送者使用这些信息发布提及。使用其中一个检查过的IP地址来发布(而不是域名,这可能会重新进行DNS查找),并在HTTP头中的Host中使用主机。

测试

快速测试,无需日志记录、覆盖率报告或对Webmention Rocks!的实际调用。

$ composer test -- --no-logging --no-coverage --exclude-group internet

否则

$ composer test