web-dev-qa-db-fra.com

pingback renvoie faultCode 0, aucun message

J'ai implémenté mon propre client pingback et envoyé des pingback à différents hôtes.

Certaines instances de wordpress ont répondu à la demande pingback XML-RPC avec une variable faultCode de 0 et une variable faultMessage.

Quelle peut en être la cause?

2
cweiske

Pour une raison quelconque, le filtre par défaut associé aux erreurs pingback n'enverra pas de message d'erreur sauf si le code d'erreur est 48. From wp-includes/commment.php:

function xmlrpc_pingback_error( $ixr_error ) {
    if ( $ixr_error->code === 48 )
        return $ixr_error;
    return new IXR_Error( 0, '' );
}
1
Glen

La source Wordpress standard ne contient qu'un seul appel d'erreur de pingback avec un faultCode de 0 et un message vide, en wp-includes/class-wp-xmlrpc-server.php:

} elseif ( is_string($urltest['fragment']) ) {
        // ...or a string #title, a little more complicated
        $title = preg_replace('/[^a-z0-9]/i', '.', $urltest['fragment']);
        $sql = $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_title RLIKE %s", like_escape( $title ) );
        if (! ($post_ID = $wpdb->get_var($sql)) ) {
                // returning unknown error '0' is better than die()ing
                return $this->pingback_error( 0, '' );
        }
        $way = 'from the fragment (title)';
}

Ainsi, l'erreur peut se produire lorsque la publication ne peut pas être déterminée à partir de l'URL et qu'il existe un fragment/ancre (#foo) à la fin de l'URL. Ce fragment est interprété comme titre et la table des articles est recherchée pour un article avec exactement ce titre.


Malheureusement, cela ne peut pas être la raison dans mon cas puisque je n'ai pas d'ancres dans les URL.

1
cweiske