Kurang dari jawaban, tetapi hanya daftar hal-hal langsung dari pengalaman saya dengannya - mungkin Anda telah mengabaikan sesuatu.
Men-debug permintaan & hasilnya
Tanpa diggin terlalu jauh ke dalam proses pembaruan, tetapi WP HTTP API menggunakan WP_HTTP
kelas. Ini juga menawarkan hal yang menyenangkan: Sebuah kait debug.
do_action( 'http_api_debug', $response, 'response', $class, $args, $url );
Di mana $response
juga bisa menjadi WP_Error
objek yang mungkin memberi tahu Anda lebih banyak.
Catatan: Dari tes singkat, filter ini tampaknya hanya (karena alasan tertentu) berfungsi jika Anda menempatkannya sedekat mungkin dengan tempat Anda benar-benar melakukan permintaan. Jadi mungkin Anda perlu meneleponnya dari dalam panggilan balik di salah satu filter di bawah ini.
WP_HTTP
Argumen kelas
Argumen Classes itu sendiri dapat difilter, tetapi beberapa afaik mendapatkan reset dengan metode internal kembali ke apa WP menganggap bahwa diperlukan.
apply_filters( 'http_request_args', $r, $url );
Salah satu argumennya adalah ssl_verify
, yang benar secara default (tetapi bagi saya menyebabkan masalah besar ketika memperbarui dari - misalnya - GitHub). Sunting: Setelah men-debug permintaan pengujian, saya menemukan argumen lain yang ditetapkan untuk memverifikasi jika SSL diatur ke true
. Ini disebut sslverify
(tanpa memisahkan garis bawah). Tidak tahu di mana ini datang ke dalam permainan, apakah itu benar-benar digunakan atau ditinggalkan dan jika Anda memiliki kesempatan untuk mempengaruhi nilainya. Saya menemukannya menggunakan 'http_api_debug'
filter.
Sepenuhnya kustom
Anda juga dapat "cukup" menimpa seluruh internal dan pergi dengan pengaturan khusus. Ada filter untuk itu.
apply_filters( 'pre_http_request', false, $r, $url );
Arg pertama harus di set true. Daripada Anda dapat berinteraksi dengan argumen di dalam $r
dan hasil dari parse_url( $url );
.
Proksi
Hal lain yang mungkin berhasil adalah menjalankan semuanya melalui Proxy khusus. Ini membutuhkan beberapa pengaturan di wp-config.php
. Saya belum pernah mencoba ini sebelumnya, tetapi saya berlari melalui konstanta beberapa waktu lalu dan menyimpulkan beberapa contoh yang harus bekerja dan menyertakan beberapa komentar jika saya membutuhkannya suatu hari. Anda harus mendefinisikan WP_PROXY_HOST
dan WP_PROXY_PORT
sebagai min. pengaturan. Jika tidak, tidak ada yang akan bekerja dan itu hanya akan memotong proxy Anda.
# 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' );
EDIT
The WP_HTTP
Kelas biasanya bertindak sebagai basis kelas (akan diperpanjang untuk skenario yang berbeda). The memperpanjang WP_HTTP_*
kelas yang Fsockopen
, Streams
, Curl
, Proxy
, Cookie
, Encoding
. Jika Anda mengaitkan panggilan balik ke 'http_api_debug'
-aksi, maka argumen ketiga akan memberi tahu Anda kelas mana yang digunakan untuk permintaan Anda.
Di dalam WP_HTTP_curl
Kelas, Anda akan menemukan request()
metodenya. Metode ini menawarkan dua filter untuk mencegat perilaku SSL: Satu untuk permintaan lokal 'https_local_ssl_verify'
dan satu untuk permintaan jarak jauh 'https_ssl_verify'
. WP kemungkinan akan mendefinisikan local
sebagai localhost
dan apa yang Anda dapatkan sebagai imbalannya get_option( 'siteurl' );
.
Jadi yang akan saya lakukan adalah mencoba yang berikut sebelum Anda melakukan permintaan itu (atau dari panggilan balik yang terhubung ke permintaan terdekat:
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: Dalam kebanyakan kasus WP_HTTP_curl
akan digunakan untuk menangani Proxy.