น้อยกว่าคำตอบ แต่เพียงแค่รายการสิ่งที่ตรงจากประสบการณ์ของฉันกับมัน - บางทีคุณอาจมองข้ามบางสิ่งบางอย่าง
การดีบักคำขอและผลลัพธ์
โดยไม่ต้องขุดลึกเกินไปในกระบวนการอัปเดต แต่ WP HTTP API ใช้WP_HTTPคลาส นอกจากนี้ยังมีข้อเสนอที่ดี: ตัวแก้ไขข้อบกพร่อง
do_action( 'http_api_debug', $response, 'response', $class, $args, $url );
ที่ไหน$responseก็สามารถเป็นWP_Errorวัตถุที่อาจบอกคุณมากกว่านี้
หมายเหตุ: จากการทดสอบสั้น ๆ ตัวกรองนี้ดูเหมือนว่าจะทำงานได้เพียงบางเหตุผล (ถ้ามีเหตุผล) ถ้าคุณวางไว้ใกล้กับตำแหน่งที่คุณขอ ดังนั้นคุณอาจต้องโทรจากภายในการติดต่อกลับด้วยตัวกรองด้านล่าง
WP_HTTP อาร์กิวเมนต์คลาส
อากิวเมนต์ Classes นั้นสามารถกรองได้ แต่บางตัวก็จะถูกรีเซ็ตโดยเมธอด internals กลับไปเป็นสิ่งที่ WP คิดว่าจำเป็น
apply_filters( 'http_request_args', $r, $url );
หนึ่งในข้อโต้แย้งคือssl_verifyซึ่งเป็นจริงโดยค่าเริ่มต้น (แต่สำหรับฉันทำให้เกิดปัญหาใหญ่เมื่ออัปเดตจาก - ตัวอย่างเช่น - GitHub) แก้ไข:หลังจากการแก้จุดบกพร่องคำขอทดสอบผมพบว่าการโต้แย้งอื่นที่มีการตั้งค่าเพื่อตรวจสอบว่า SSL trueถูกตั้งค่าให้ มันถูกเรียกว่าsslverify(โดยไม่แยกเครื่องหมายขีดล่าง) ไม่มีความคิดที่สิ่งนี้เข้ามาในเกมหากมีการใช้งานจริงหรือถูกทอดทิ้งและถ้าคุณมีโอกาสที่จะมีอิทธิพลต่อค่าของมัน ฉันพบมันโดยใช้'http_api_debug'ตัวกรอง
กำหนดเองโดยสิ้นเชิง
นอกจากนี้คุณยังสามารถ "แทนที่" เพียงแค่แทนที่ internals ทั้งหมดและไปกับการตั้งค่าแบบกำหนดเอง มีตัวกรองสำหรับสิ่งนั้น
apply_filters( 'pre_http_request', false, $r, $url );
ARG แรกจะต้องตั้งค่าเป็นจริง กว่าที่คุณสามารถโต้ตอบกับการขัดแย้งภายในและผลจาก$rparse_url( $url );
หนังสือมอบฉันทะ
สิ่งอื่นที่อาจใช้ได้คือทำงานทุกอย่างผ่านพร็อกซีที่กำหนดเอง wp-config.phpนี้ต้องตั้งค่าบางอย่างในของคุณ ฉันไม่เคยลองแบบนี้มาก่อน แต่ฉันก็วิ่งผ่านค่าคงที่มาระยะหนึ่งแล้วสรุปตัวอย่างบางส่วนที่ควรใช้งานได้และรวมความคิดเห็นไว้ด้วยในกรณีที่ฉันต้องการมันสักวันหนึ่ง คุณต้องกำหนดWP_PROXY_HOSTและWP_PROXY_PORTเป็นนาที การตั้งค่า ไม่มีอะไรจะใช้งานได้อีกต่อไปและมันจะเลี่ยงผ่านพร็อกซีของคุณ
# 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' );
แก้ไข
โดยWP_HTTPปกติคลาสจะทำหน้าที่เป็นคลาสพื้นฐาน (จะถูกขยายสำหรับสถานการณ์ต่าง ๆ ) ขยายWP_HTTP_*ชั้นเรียนFsockopen, Streams, Curl, Proxy, ,Cookie Encodingถ้าคุณขอให้โทรกลับไปยัง'http_api_debug'-action ดังนั้นอาร์กิวเมนต์ที่สามจะบอกคุณว่าคลาสใดที่ใช้สำหรับคำขอของคุณ
ในWP_HTTP_curlชั้นเรียนคุณจะพบrequest()วิธีการ วิธีการนี้มีสองตัวกรองเพื่อสกัดกั้นพฤติกรรมของ SSL: หนึ่งสำหรับการร้องขอท้องถิ่นและหนึ่งสำหรับการร้องขอจากระยะไกล'https_local_ssl_verify' 'https_ssl_verify'WP มีแนวโน้มที่จะกำหนดlocalเป็นและสิ่งที่คุณได้รับผลตอบแทนจากlocalhostget_option( 'siteurl' );
ดังนั้นสิ่งที่ฉันจะทำคือลองทำตามขั้นตอนต่อไปนี้ก่อนที่คุณจะทำตามคำขอ (หรือจากการโทรกลับที่ติดอยู่กับคำขอที่ใกล้ที่สุด:
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: ในกรณีส่วนใหญ่WP_HTTP_curlจะถูกใช้เพื่อจัดการพร็อกซี่