น้อยกว่าคำตอบ แต่เพียงแค่รายการสิ่งที่ตรงจากประสบการณ์ของฉันกับมัน - บางทีคุณอาจมองข้ามบางสิ่งบางอย่าง
การดีบักคำขอและผลลัพธ์
โดยไม่ต้องขุดลึกเกินไปในกระบวนการอัปเดต แต่ 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 แรกจะต้องตั้งค่าเป็นจริง กว่าที่คุณสามารถโต้ตอบกับการขัดแย้งภายในและผลจาก$r
parse_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
เป็นและสิ่งที่คุณได้รับผลตอบแทนจากlocalhost
get_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
จะถูกใช้เพื่อจัดการพร็อกซี่