为什么 Akismet return 密钥验证失败?
Why does Akismet return failed on key verification?
在自托管的新安装版本 4.8.1 上,网站使用 2017 默认主题,我使用 API 键激活了 Akismet 插件。将 single.php
修改为:
if (function_exists('akismet_verify_key')) :
$testing = akismet_verify_key(akismet_get_key(), site_url());
echo $testing;
endif;
但它总是会回来 failed
。我已确保网站域名包含在 Akismet 仪表板中,但无论出于何种原因,在阅读 [密钥验证文档][1] 并检测到该功能存在后,它不会 return true
。
如果我复制 PHP 示例并将函数的命名约定更改为 akismet_check
:
function akismet_check($key, $blog) {
$blog = urlencode($blog);
$request = 'key='. $key .'&blog='. $blog;
$host = $http_host = 'rest.akismet.com';
$path = '/1.1/verify-key';
$port = 443;
$akismet_ua = "WordPress/4.4.1 | Akismet/3.1.7";
$content_length = strlen( $request );
$http_request = "POST $path HTTP/1.0\r\n";
$http_request .= "Host: $host\r\n";
$http_request .= "Content-Type: application/x-www-form-urlencoded\r\n";
$http_request .= "Content-Length: {$content_length}\r\n";
$http_request .= "User-Agent: {$akismet_ua}\r\n";
$http_request .= "\r\n";
$http_request .= $request;
$response = '';
if (false != ( $fs = @fsockopen( 'ssl://' . $http_host, $port, $errno, $errstr, 10))) :
fwrite( $fs, $http_request );
while ( !feof( $fs ) )
$response .= fgets( $fs, 1160 ); // One TCP-IP packet
fclose( $fs );
$response = explode( "\r\n\r\n", $response, 2 );
endif;
if ( 'valid' == $response[1] ) :
return true;
else :
return false;
endif;
}
并通过它:
echo 'Akismet shows ' . $result = akismet_check(akismet_get_key(), site_url());
我不明白该功能是否已经存在,但我可以检测到它为什么会失败。 Akismet 是否有密钥验证的替代方法,因此如果 akismet_verify_key
不起作用或我做错了什么,我不必重新编写整个函数来执行似乎已经存在的操作?
akismet_verify_key()
的第二个参数不是您的站点 URL,它是您要连接的 Akismet API 服务器的 IP。它在 Akismet_Admin::check_server_ip_connectivity()
中用于帮助网站在无法始终连接到 API 时进行故障排除。
将您的呼叫更改为 $testing = akismet_verify_key( akismet_get_key() );
应该可行。
旁注:为什么要验证主题中的 Akismet API 密钥?或者这只是一个展示问题的简化示例?
在自托管的新安装版本 4.8.1 上,网站使用 2017 默认主题,我使用 API 键激活了 Akismet 插件。将 single.php
修改为:
if (function_exists('akismet_verify_key')) :
$testing = akismet_verify_key(akismet_get_key(), site_url());
echo $testing;
endif;
但它总是会回来 failed
。我已确保网站域名包含在 Akismet 仪表板中,但无论出于何种原因,在阅读 [密钥验证文档][1] 并检测到该功能存在后,它不会 return true
。
如果我复制 PHP 示例并将函数的命名约定更改为 akismet_check
:
function akismet_check($key, $blog) {
$blog = urlencode($blog);
$request = 'key='. $key .'&blog='. $blog;
$host = $http_host = 'rest.akismet.com';
$path = '/1.1/verify-key';
$port = 443;
$akismet_ua = "WordPress/4.4.1 | Akismet/3.1.7";
$content_length = strlen( $request );
$http_request = "POST $path HTTP/1.0\r\n";
$http_request .= "Host: $host\r\n";
$http_request .= "Content-Type: application/x-www-form-urlencoded\r\n";
$http_request .= "Content-Length: {$content_length}\r\n";
$http_request .= "User-Agent: {$akismet_ua}\r\n";
$http_request .= "\r\n";
$http_request .= $request;
$response = '';
if (false != ( $fs = @fsockopen( 'ssl://' . $http_host, $port, $errno, $errstr, 10))) :
fwrite( $fs, $http_request );
while ( !feof( $fs ) )
$response .= fgets( $fs, 1160 ); // One TCP-IP packet
fclose( $fs );
$response = explode( "\r\n\r\n", $response, 2 );
endif;
if ( 'valid' == $response[1] ) :
return true;
else :
return false;
endif;
}
并通过它:
echo 'Akismet shows ' . $result = akismet_check(akismet_get_key(), site_url());
我不明白该功能是否已经存在,但我可以检测到它为什么会失败。 Akismet 是否有密钥验证的替代方法,因此如果 akismet_verify_key
不起作用或我做错了什么,我不必重新编写整个函数来执行似乎已经存在的操作?
akismet_verify_key()
的第二个参数不是您的站点 URL,它是您要连接的 Akismet API 服务器的 IP。它在 Akismet_Admin::check_server_ip_connectivity()
中用于帮助网站在无法始终连接到 API 时进行故障排除。
将您的呼叫更改为 $testing = akismet_verify_key( akismet_get_key() );
应该可行。
旁注:为什么要验证主题中的 Akismet API 密钥?或者这只是一个展示问题的简化示例?