Bir cevaptan daha az, ama sadece onunla olan deneyimimden sadece bir şeyler listesi - belki bir şeyleri gözden kaçırdınız.
İstek ve sonuçlarında hata ayıklama
Diggin olmadan güncelleme süreci çok derin, ama WP HTTP API WP_HTTP
sınıfı kullanır . Ayrıca güzel bir şey sunar: Hata ayıklama kancası.
do_action( 'http_api_debug', $response, 'response', $class, $args, $url );
Nerede size daha fazlasını anlatan $response
bir WP_Error
nesne de olabilir .
Not: Kısa bir testten sonra, bu filtre yalnızca (bazı nedenlerden dolayı) isteği gerçekte yaptığınız yere yakın yerleştirirseniz çalışır . Bu nedenle, aşağıdaki filtrelerden birindeki geri arama ile aramanız gerekebilir.
WP_HTTP
Sınıf argümanları
Sınıflar argümanlarının kendisi filtrelenebilir, ancak afaik bazıları WP'nin gerekli olduğunu varsaydığı yöntemlere geri döner.
apply_filters( 'http_request_args', $r, $url );
Bağımsız değişkenlerden biri ssl_verify
, varsayılan olarak doğrudur (ancak benim için - örneğin - GitHub'dan güncelleme yaparken büyük sorunlara neden olur). Düzenleme: Bir test isteğinde hata ayıkladıktan sonra, SSL'nin ayarlanmış olup olmadığını doğrulamak için ayarlanmış başka bir bağımsız değişken buldum true
. Denir sslverify
(alt çizgi ayırmadan). Oyunun nereden geldiğine dair bir fikrim yok, eğer gerçekten kullanımda veya terkedilmişse ve değerini etkileme şansınız varsa. 'http_api_debug'
Filtreyi kullanarak buldum .
Tamamen özel
Ayrıca tüm iç kısımları "basitçe" geçersiz kılabilir ve özel bir kurulumla devam edebilirsiniz. Bunun için bir filtre var.
apply_filters( 'pre_http_request', false, $r, $url );
İlk arg öğesinin true değerine ayarlanması gerekir. Daha sonra içerideki argümanlar $r
ve sonucu ile etkileşime girebilirsiniz parse_url( $url );
.
vekil
Çalışabilecek başka bir şey, her şeyi özel bir Proxy üzerinden çalıştırmak olabilir. Bunun için bazı ayarların yapılması gerekiyor wp-config.php
. Bunu daha önce hiç denemedim, ancak sabitleri bir süre önce koştum ve çalışması gereken bazı örnekleri özetledim ve bir gün ihtiyacım olması durumunda bazı yorumları da ekledim. Sen tanımlamak zorunda WP_PROXY_HOST
ve WP_PROXY_PORT
bir dakika kadar. ayarı. Başka hiçbir şey işe yaramaz ve sadece proxy'nizi atlar.
# HTTP Proxies
# Used for e.g. in Intranets
# Fixes Feeds as well
# Defines the proxy adresse.
define( 'WP_PROXY_HOST', '127.0.84.1' );
# Defines the proxy port.
define( 'WP_PROXY_PORT', '8080' );
# Defines the proxy username.
define( 'WP_PROXY_USERNAME', 'my_user_name' );
# Defines the proxy password.
define( 'WP_PROXY_PASSWORD', 'my_password' );
# Allows you to define some adresses which
# shouldn't be passed through a proxy.
define( 'WP_PROXY_BYPASS_HOSTS', 'localhost, www.example.com' );
DÜZENLE
WP_HTTP
Sınıf normal olarak hareket baz (farklı senaryolar için uzatılır) sınıfı. Uzanan WP_HTTP_*
sınıfları Fsockopen
, Streams
, Curl
, Proxy
, Cookie
, Encoding
. 'http_api_debug'
-Action işlevine bir geri çağırma bağlarsanız, üçüncü argüman isteğiniz için hangi sınıfın kullanıldığını size bildirir.
İçinde WP_HTTP_curl
Class, bulacağınız request()
yöntemi. Bu yöntem, SSL davranışını durdurmak için iki filtre sunar: Biri yerel istekler için 'https_local_ssl_verify'
ve diğeri uzak istekler için 'https_ssl_verify'
. WP muhtemelen local
olarak localhost
ve karşılığında ne alacağınızı tanımlayacaktır get_option( 'siteurl' );
.
Yani, bu isteği yapmadan önce (ya da en yakın talebe bağlı olan bir geri çağrıdan) aşağıdakileri denemek istiyorum:
add_filter( 'https_ssl_verify', '__return_true' );
# Local requests should be checked with something like
# 'localhost' === $_SERVER['HTTP_HOST'] or similar
# add_filter( 'https_local_ssl_verify', '__return_true' );
Sidenote: Çoğu durumda WP_HTTP_curl
Proxy'leri işlemek için kullanılır.