Mniej niż odpowiedź, ale tylko lista rzeczy prosto z mojego doświadczenia - może coś przeoczyłeś.
Debugowanie żądania i jego wyników
Bez diggin „zbyt głęboko w proces aktualizacji, ale WP HTTP API używa WP_HTTPklasy. Oferuje również fajną rzecz: hak debugowania.
do_action( 'http_api_debug', $response, 'response', $class, $args, $url );
Gdzie $responsemoże być także WP_Errorprzedmiot, który może powiedzieć ci więcej.
Uwaga: po krótkim teście ten filtr wydaje się (z jakiegoś powodu) działać tylko wtedy, gdy umieścisz go tak blisko miejsca, w którym faktycznie wykonujesz żądanie. Może więc trzeba zadzwonić z oddzwaniania na jednym z poniższych filtrów.
WP_HTTP Argumenty klasowe
Same argumenty Klasy są filtrowalne, ale niektóre z nich są resetowane przez wewnętrzne metody z powrotem do tego, co WP zakłada, że jest potrzebne.
apply_filters( 'http_request_args', $r, $url );
Jednym z argumentów jest ssl_verify, co jest prawdą domyślnie (ale dla mnie powoduje ogromne problemy podczas aktualizacji z - na przykład - GitHub). Edycja: Po debugowaniu żądania testowego znalazłem inny argument, który jest ustawiony, aby sprawdzić, czy SSL jest ustawiony na true. Nazywa się sslverify(bez oddzielania podkreślenia). Nie mam pojęcia, gdzie to się pojawiło, czy jest faktycznie używane, czy porzucone i czy masz szansę wpłynąć na jego wartość. Znalazłem to za pomocą 'http_api_debug'filtra.
Całkowicie niestandardowy
Możesz również „po prostu” zastąpić wszystkie elementy wewnętrzne i przejść do niestandardowej konfiguracji. Jest do tego filtr.
apply_filters( 'pre_http_request', false, $r, $url );
Pierwszy argument musi być ustawiony na true. Następnie możesz wchodzić w interakcje z argumentami wewnątrz $ri wynikami parse_url( $url );.
Pełnomocnik
Kolejną rzeczą, która może działać, może być uruchamianie wszystkiego za pośrednictwem niestandardowego serwera proxy. To wymaga pewnych ustawień w twoim wp-config.php. Nigdy wcześniej tego nie próbowałem, ale jakiś czas temu przeglądałem stałe i podsumowałem kilka przykładów, które powinny zadziałać, i zamieściłem komentarze na wypadek, gdyby tego potrzebowałem. Musisz zdefiniować WP_PROXY_HOSTi WP_PROXY_PORTjako min. oprawa. W przeciwnym razie nic nie będzie działać i po prostu obejdzie serwer proxy.
# 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' );
EDYTOWAĆ
WP_HTTPKlasy zazwyczaj działa jako podstawowej klasy (będzie przedłużony o różnych scenariuszach). Przebiegające WP_HTTP_*zajęcia są Fsockopen, Streams, Curl, Proxy, Cookie, Encoding. Jeśli podłączysz wywołanie zwrotne do 'http_api_debug'-action, trzeci argument powie ci, która klasa została użyta dla twojego żądania.
Wewnątrz WP_HTTP_curlklasy znajdziesz request()metodę. Ta metoda oferuje dwa filtry do przechwytywania zachowania SSL: jeden dla żądań lokalnych 'https_local_ssl_verify'i jeden dla żądań zdalnych 'https_ssl_verify'. WP prawdopodobnie zdefiniuje localjako localhosti to, co otrzymasz w zamian get_option( 'siteurl' );.
Chciałbym więc spróbować wykonać następujące czynności bezpośrednio przed wykonaniem tego żądania (lub z wywołania zwrotnego, które jest powiązane z najbliższym żądaniem:
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: W większości przypadków WP_HTTP_curlbędą używane do obsługi proxy.