代码之家  ›  专栏  ›  技术社区  ›  ant-C

SimplePie错误-WordPress上的curl超时

  •  1
  • ant-C  · 技术社区  · 5 年前

    我得到了错误 WP HTTP Error: cURL error 28: Operation timed out after 1001 milliseconds with 0 bytes received 使用 fetch_feed() 我的WordPress插件中的方法。

    这是为了尝试获取更大的RSS提要,我需要增加curl超时。不知道为什么设置为1秒而不是5秒?

    关于这方面的wp文档不是很详细 WP_Feed_Cache 值得注意的是 SimplePie_Cache 类文档不存在。

    任何帮助都会被感激,不确定我是否能够钩住simplepie来增加curl超时。另外,我也试着重写我自己的 FETCHYFIX() 下面没有成功的方法:

        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;
    }
    
    1 回复  |  直到 5 年前
        1
  •  0
  •   ant-C    5 年前

    //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;
    }