使用wp_emote_get在本地主机上检索自己的URL

时间:2011-12-07 作者:Mike

我在测试中有一个本地开发的网站:8888,我正在尝试在我的功能中使用以下内容。php文件。

$response = wp_remote_get( \'test:8888/?p=1\' );
print_r($response);
不幸的是,这是打印

WP_Error Object ( [errors] => Array ( [http_request_failed] => Array ( [0] => A valid URL was not provided. ) ) [error_data] => Array ( ) )  
在localhost上开发时,是否可以请求您自己的url?

4 个回复
SO网友:kaiser

Ad超时

您应该能够使用过滤器绕过超时

add_filter( \'http_request_timeout\', \'wpse35826_timeout_extd\' );
function wpse35826_timeout_extd( $time )
{
    // Default timeout is 5
    return 10;
}
选择正确的协议/方案关于协议/方案问题:如果是本地安装,可以使用条件。

function wpse35826_remote_get( $args )
{
    $protocol = is_SSL() ? \'https://\' : \'http://\';
    $response = wp_remote_get( "{$protocol}test:8888/?p=1" );
    if ( is_wp_error( $response ) )
        return "{$response->get_error_code()}: {$response->get_error_message()}";

    return print htmlspecialchars( var_export( $response, true ) );
}

// Trigger the request
wpse35826_remote_get();
如果您正在向您的own 本地服务器,则SSL验证可能存在问题。WP使用过滤器触发其设置:

add_filter( \'https_local_ssl_verify\', \'__return_false\' );
此筛选器不(!)本地服务器向web上的服务器发出请求的触发器。对于外部服务器,请使用以下筛选器:

add_filter( \'https_ssl_verify\', \'__return_false\' );
本地请求存在问题然后也可能存在阻止本地请求的问题:

add_filter( \'block_local_requests\', \'__return_false\' );
其他可能影响您执行本地请求能力的因素是在wp-config.php 文件:

WP_HTTP_BLOCK_EXTERNAL
// If WP_HTTP_BLOCK_EXTERNAL is defined you can add hosts which shouldn\'t be blocked.
WP_ACCESSIBLE_HOSTS
如果您使用代理:

// Allows you to define some adresses which shouldn\'t be passed through a proxy.
// Core sets both www and non-www as bypass.
// get_option(\'siteurl\') and localhost are bypassed by default.
WP_PROXY_BYPASS_HOSTS
没有卷曲如果有cURL 不可用,并且您没有将数据流式传输到文件,WP将回退到使用Fsocketopen() 相反从核心评论中可以很好地总结:

Fsocketopen在某些版本的PHP的IPv6中存在“localhost”问题,它试图连接到::1,当服务器未为其设置时,它会失败。为了兼容性,请始终连接到IPv4地址。

关键是,只有当我们得到主机名时,WP才会加入localhost. 然后,fsocketopen主机将设置为\'127.0.0.1\'.

SO网友:Otto

\'测试:8888/?“p=1”不是有效的URL。

“尝试”http://test:8888/?p=1\' 相反

SO网友:brasofilo

我遇到了一个类似的问题,并这样解决:

function wpse35826_remote_get() {
    $response = wp_remote_get( \'http://test:8888/?p=1\' );
    echo \'Response:<pre>\';
    print_r($response);
    echo \'</pre>\';
}
add_action(\'admin_init\',\'wpse35826_remote_get\');

SO网友:Ian Dunn

我想你实际上有两个问题。奥托的回答解决了你的第一个问题,因为http:// off使其成为无效URL,这就是为什么您得到A valid URL was not provided 错误

第二个问题是一些不同的和不相关的东西,给你Operation timed out 错误如果不看完整的代码,我不能肯定,但我猜wp_remote_get() 调用位于一个回调函数中,该回调函数注册到一个钩子,该钩子也在被请求的页面上触发wp_remote_get(). 这种情况会创建一个最终超时的递归循环。

你需要确保wp_remote_get() 您请求的页面上未触发呼叫。可以通过将回调注册到另一个钩子或使用conditional tags 避免呼叫wp_remote_get() 在请求的页面上。

下面是一个示例,假设您总是调用非管理员页面:

if( !is_admin() )
    return;

$response = wp_remote_get( \'http://test:8888/?p=1\' );
print_r($response);

结束

相关推荐

WordPress SEO by Yoast plugin创建的XML站点地图中列出的神秘URL http://#/

我正在使用Yoast插件的Wordpress SEO。我在让Sitemaps XML部分正常工作时遇到问题。谷歌给了我一个可怕的红色X来表示网站地图的状态。谷歌给出的错误消息是:208“无效URL这不是有效的URL。请更正并重新提交。”错误的Google XML列表是:http://#/ . 在该插件创建的XML sitempap中,我可以看到该URL已列出。我不确定XML站点地图生成器是从哪里得到这个URL的。为了让下拉菜单正常工作,我在一些只有标题的空白页面上将URL设置为#。例如,我导航中的第一个子