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_HTTP
klasy. Oferuje również fajną rzecz: hak debugowania.
do_action( 'http_api_debug', $response, 'response', $class, $args, $url );
Gdzie $response
może być także WP_Error
przedmiot, 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 $r
i 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_HOST
i WP_PROXY_PORT
jako 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_HTTP
Klasy 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_curl
klasy 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 local
jako localhost
i 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_curl
będą używane do obsługi proxy.