¿Cómo uso el filtro 'http_request_host_is_external'

3

Me está costando mucho intentar usar el filtro http_request_host_is_external . Para algunos antecedentes, estoy tratando de configurar un servidor separado para manejar las actualizaciones de temas y complementos privados. El problema es que está en un servidor separado, por lo que la función Wordpress wp_http_validate_url (wp-includes / http.php) mata la solicitud. Las siguientes son las líneas 481-503 de ese archivo.

if ( $ip ) {
        $parts = array_map( 'intval', explode( '.', $ip ) );
        if ( '127.0.0.1' === $ip
            || ( 10 === $parts[0] )
            || ( 172 === $parts[0] && 16 <= $parts[1] && 31 >= $parts[1] )
            || ( 192 === $parts[0] && 168 === $parts[1] )
        ) {
            // If host appears local, reject unless specifically allowed.
            /**
             * Check if HTTP request is external or not.
             *
             * Allows to change and allow external requests for the HTTP request.
             *
             * @since 3.6.0
             *
             * @param bool false Whether HTTP request is external or not.
             * @param string $host IP of the requested host.
             * @param string $url URL of the requested host.
             */
            if ( ! apply_filters( 'http_request_host_is_external', false, $host, $url ) )
                return false;
        }
    }

Notarás que hay un comentario allí que menciona que deberíamos poder aplicar el filtro y hacer solicitudes externas, pero lo que estoy intentando no parece funcionar.

    require 'plugin_update_checker.php';
apply_filters( 'http_request_host_is_external', true, "my-update-server.com", 'http://my-update-server.com/update/8b6b28f1a2604deea192076cb2343ff4/' );
$MyUpdateChecker = new PluginUpdateChecker_1_3(
    'http://my-update-server/update/8b6b28f1a2604deea192076cb2343ff4/',
    __FILE__,
    'testslug'
);

Pensé que si configuraba el filtro en el archivo principal de mi complemento, se encargaría de eso, pero creo que el problema es que la solicitud externa está sucediendo en el actualizador de Wordpress, ¿entonces tal vez mi filtro no se aplique?

    
pregunta Jack Slingerland 14.11.2013 - 22:13

2 respuestas

9

Puedes hacer esto:

add_filter( 'http_request_host_is_external', '__return_true' );

Sin embargo, tenga en cuenta que esto deshabilita esta función de seguridad. Si sabe que el host o la url no van a cambiar y siempre va a ser eso, puede estar más seguro comprobándolo explícitamente:

add_filter( 'http_request_host_is_external', 'allow_my_custom_host', 10, 3 );
function allow_my_custom_host( $allow, $host, $url ) {
  if ( $host == 'my-update-server' )
    $allow = true;
  return $allow;
}
    
respondido por el Otto 14.11.2013 - 22:54
0

Aparentemente estoy un poco oxidado. Esto se hizo cargo de mí:

add_filter( 'http_request_host_is_external', function() { return true; });
    
respondido por el Jack Slingerland 14.11.2013 - 22:23

Lea otras preguntas en las etiquetas