SimplePie-Fehler – Curl-Timeout bei WordPress

Lesezeit: 3 Minuten

Benutzeravatar von ant-C
Ameise-C

Ich erhalte den Fehler WP HTTP Error: cURL error 28: Operation timed out after 1001 milliseconds with 0 bytes received Verwendung der fetch_feed() Methode in meinem WordPress-Plugin.

Dies dient dem Versuch, einen größeren RSS-Feed abzurufen, und ich muss das Curl-Timeout erhöhen. Nicht sicher, warum es auch auf 1 Sekunde statt auf 5 eingestellt ist?

Die WP-Dokumentation hierzu ist nicht sehr detailliert WP_Feed_Cache vor allem das SimplePie_Cache Klassendokumentation ist nicht vorhanden.

Für jede Hilfe wäre ich dankbar. Ich bin mir nicht sicher, ob ich mich in SimplePie einklinken kann, um das Curl-Timeout zu erhöhen. Außerdem habe ich versucht, mein eigenes umzuschreiben fetch_feed() Methode ohne Erfolg unten:

    public function fetchFeed( $url ) {
    if( ! class_exists('\SimplePie', false) ) {
        require_once( ABSPATH . WPINC . '/class-simplepie.php' );
    }

    require_once( ABSPATH . WPINC . '/class-wp-feed-cache.php' );
    require_once( ABSPATH . WPINC . '/class-wp-feed-cache-transient.php' );
    require_once( ABSPATH . WPINC . '/class-wp-simplepie-file.php' );
    require_once( ABSPATH . WPINC . '/class-wp-simplepie-sanitize-kses.php' );

    $feed = new \SimplePie();

    $feed->set_sanitize_class( 'WP_SimplePie_Sanitize_KSES' );
    // We must manually overwrite $feed->sanitize because SimplePie's
    // constructor sets it before we have a chance to set the sanitization class
    $feed->sanitize = new \WP_SimplePie_Sanitize_KSES();


    /* Customize sanitization */
    $feed->sanitize->enable_cache = false;
    $feed->sanitize->timeout = 60;
    $feed->sanitize->useragent = "Custom Testing Feed Reader";

    $feed->set_cache_class( 'WP_Feed_Cache' );
    $feed->set_file_class( 'WP_SimplePie_File' );

    $feed->set_feed_url( $url );
    $feed->set_timeout( 30 );
    /** This filter is documented in wp-includes/class-wp-feed-cache-transient.php */
    $feed->set_cache_duration( apply_filters( 'wp_feed_cache_transient_lifetime', 60, $url ) ); //changing cache time to 60 seconds (instead of 12 hours)
    /**
     * Fires just before processing the SimplePie feed object.
     *
     * @since 3.0.0
     *
     * @param object $feed SimplePie feed object (passed by reference).
     * @param mixed  $url  URL of feed to retrieve. If an array of URLs, the feeds are merged.
     */
    do_action_ref_array( 'wp_feed_options', array( &$feed, $url ) );
    $feed->init();
    // $feed->set_output_encoding( get_option( 'blog_charset' ) );
    $feed->set_output_encoding( "UTF-8" ); //set statically to UTF-8

    if ( $feed->error() )
        return new \WP_Error( 'simplepie-error', $feed->error() );

    return $feed;
}

Ich konnte das Curl-Timeout mithilfe des folgenden Codes erhöhen:

//Set HTTP Request Timeout
add_filter('http_request_args', 'my_http_request_args', 100, 1);
function my_http_request_args( $r ) {
    $r['timeout'] = 30;
    return $r;
}

//Setting WP HTTP API Timeout
add_action('http_api_curl', 'my_http_api_curl', 100, 1);
function my_http_api_curl( $handle ) {
    curl_setopt( $handle, CURLOPT_CONNECTTIMEOUT, 30);
    curl_setopt( $handle, CURLOPT_TIMEOUT, 30 );
}

// Setting custom timeout for the HTTP request
add_filter('http_request_timeout', 'my_custom_http_request_timeout', 101 );
function my_custom_http_request_timeout( $timeLimit ) {
    return 30;
}

  • Danke dafür. Sehr ärgerlich, dass es keinen eingebauten Filter gibt, der nur das globale Timeout ändern würde! Für alle anderen, die sich fragen: Sie müssen das alles kopieren, damit es funktioniert. Es scheint, dass es in WP mehrere Zeitüberschreitungen gibt, und wenn Sie sie nicht alle filtern, übernimmt am Ende eine davon und begrenzt sie auf 15 Sekunden.

    – Jerclarke

    28. April um 22:33

  • Beachten Sie außerdem, dass sich dadurch die Zeitüberschreitung bei ALLEN HTTP-ANFRAGEN erhöht, nicht nur bei SimplePie. Das bedeutet, dass jedes Plugin, das nach einem Update sucht, Ihre Website VIEL langsamer machen könnte. Seien Sie also vorsichtig! Niemand sollte dies tatsächlich in der Produktion verwenden! Ich brauchte es für einige Abnahmetests, bei denen es manchmal zu Zeitüberschreitungen kam.

    – Jerclarke

    28. April um 22:37 Uhr

1450700cookie-checkSimplePie-Fehler – Curl-Timeout bei WordPress

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy