pear/net_webfinger

PHP的WebFinger实现

v0.4.1 2023-05-22 18:21 UTC

This package is auto-updated.

Last update: 2024-09-10 18:56:40 UTC


README

PHP的WebFinger客户端库。

通过用户的电子邮件地址发现有关用户的其他元数据。可发现的数据可以是用户的OpenID、个人资料页面URL、可移植联系人链接、hcard、foaf和其他用户页面。

分布式社交网络使用WebFinger来分发公开加密密钥、OStatus和Salmon URL。

该软件包支持Webfinger(RFC 7033)并可回退到RFC 6415(host-meta + lrdd)。

内容

错误处理

该软件包不抛出任何异常。技术上,Net_WebFinger_Error对象是异常,但它们仅作为Net_WebFinger_Reaction对象的$error属性设置。

如果您只想获取数据,则可以完全忽略它们。

有时甚至需要忽略数据。例如,Yahoo有一个host-meta文件,但没有LRDD文件。OpenID提供者的URL已经记录在host-meta中,因此即使检索LRDD文件失败,仍然可以获取有关OpenID提供者的信息。

错误处理示例

Net_WebFinger_Reaction对象有一个包含错误消息和代码的异常的$error属性。它甚至还有一个包含更多底层细节的前一个异常对象。

<?php
require_once 'Net/WebFinger.php';
$wf  = new Net_WebFinger();
$react = $wf->finger('user@example.org');


if ($react->error !== null) {
    echo "Error when fetching " . $react->url . "\n";
    echo "Error: " . $react->error->getMessage() . "\n";
    if ($react->error->getPrevious()) {
        echo "Underlying error: "
            . $react->error->getPrevious()->getMessage() . "\n";
    }
}
?>

示例

OpenID发现

<?php
require_once 'Net/WebFinger.php';
$wf = new Net_WebFinger();
$react = $wf->finger('user@example.org');
if ($react->error) {
    echo 'There was an error: ' . $react->error->getMessage() . "\n";
}
$openIdProvider = $react->get('http://specs.openid.net/auth/2.0/provider');
if ($openIdProvider !== null) {
    echo 'OpenID provider found: ' . $openIdProvider . "\n";
}
?>

简单链接访问

一些常见的链接关系在Net_WebFinger中有简短名称。可以使用这些简短名称更容易地访问它们。

<?php
require_once 'Net/WebFinger.php';
$wf  = new Net_WebFinger();
$react = $wf->finger('user@example.org');
if ($react->error) {
    echo 'There was an error: ' . $react->error->getMessage() . "\n";
}
if ($react->openid !== null) {
    echo 'OpenID provider found: ' . $react->openid . "\n";
}
?>

当前支持的简短名称

  • 联系人
  • hcard
  • OpenID
  • 个人资料
  • xfn

请参阅类Net_WebFinger_Reaction中的列表$shortNameMap

访问所有链接

您可以使用foreach遍历反应对象以获取所有链接。

<?php
require_once 'Net/WebFinger.php';
$wf = new Net_WebFinger();
$react = $wf->finger('user@example.org');
foreach ($react as $link) {
    echo 'Link: ' . $link->rel . ' to ' . $link->href . "\n";
}
?>

缓存

使用缓存,检索的文件将被存储在本地,当再次加载相同的标识符(电子邮件地址)时,以及当检索同一主机的另一个标识符时,将导致查找时间更快。

<?php
require_once 'Net/WebFinger.php';
require_once 'Cache.php';
$wf = new Net_WebFinger();
$wf->setCache(
    new Cache('file', array('cache_dir' => sys_get_temp_dir() . '/myapp'))
);
$react = $wf->finger('user@example.org');
$openIdProvider = $react->get('http://specs.openid.net/auth/2.0/provider');
?>

注意:PEAR的Cache_Lite软件包不支持每个项目的生存时间,因此我们无法使用它:http://pear.php.net/bugs/bug.php?id=13297

安全性

当可能时,所有文件都将通过SSL检索,并回退到常规HTTP。

对于纯webfinger文件,回退仅在启用$fallbackToHttp时发生。对于host-meta和LRDD文件,回退始终开启。

还会验证XRD主题。如果不匹配电子邮件地址的主机名,则设置错误对象。

<?php
require_once 'Net/WebFinger.php';
$wf  = new Net_WebFinger();
$react = $wf->finger('user@example.org');
if ($react->error || !$react->secure) {
    die("Those data may not be trusted\n");
}

自定义HTTP适配器

如果您想发送特殊的HTTP标头或需要例如代理设置,可以使用自己的HTTP适配器来检索文件。

<?php
require_once 'HTTP/Request2.php';
require_once 'Net/WebFinger.php';

$req = new HTTP_Request2();
$req->setConfig('follow_redirects', true);//needed for full compatibility
$req->setHeader('User-Agent', 'MyApp 1.42');

$wf = new Net_WebFinger();
$wf->setHttpClient($req);
$react = $wf->finger('foo@example.org');

测试

您可以使用这些标识符来测试在各个提供商上的WebFinger功能。

链接

参考

其他实现

请参阅 http://www.packetizer.com/webfinger/software.html