Làm cách nào để sử dụng API HTTP với Proxy?


7

Nếu tôi muốn định tuyến một yêu cầu HTTP thông qua một Proxy cục bộ (bí danh: trên máy chủ hiện tại), tôi sẽ làm thế nào để giải quyết vấn đề này?

Các cài đặt Proxy được phép cho các wp-config.phpmục sau:

# 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' );

Câu hỏi này là một theo dõi về câu hỏi này .


Tôi không hiểu câu hỏi, chính xác. Bạn dường như có câu trả lời ngay tại đó. Đó là các cài đặt proxy cho API HTTP. Nếu bạn phải thông qua một proxy để thực hiện các yêu cầu bên ngoài, thì vâng, đó là cách bạn thực hiện nó.
Otto

Đọc câu hỏi ban đầu: Có, những điều này không liên quan gì đến các proxy ngược. Đây là để thực hiện các yêu cầu từ WP ra thế giới bên ngoài, thông qua một máy chủ proxy.
Otto

@Otto Vâng, câu trả lời là rõ ràng và có nó xuất phát từ câu hỏi khác. Vui mừng bạn đã có điểm đó. WPSE là một hệ thống tham khảo và sống từ các giải thích và chi tiết không được cung cấp ở nơi khác hoặc được cung cấp chi tiết hơn ở đây ... do đó câu hỏi.
kaiser

Điều đó không có ý nghĩa gì. Tại sao bạn lại đặt câu hỏi nếu bạn đã biết câu trả lời? Chỉnh sửa: Bạn biết những gì, đừng bận tâm, đừng bận tâm để giải thích. Tôi sẽ chỉ downvote và bỏ phiếu để xóa nó, bởi vì điều này vô nghĩa và không nên ở đây.
Otto

1
@Otto Khi tôi tình cờ nhận xét của bạn một lần nữa: Xem ảnh chụp màn hình này .
kaiser

Câu trả lời:


7

Các cài đặt proxy hoạt động giống như các yêu cầu HTTP thông thường nhưng trong trường hợp này rõ ràng được chuyển qua proxy. Về mặt WordPress, các lớp vận chuyển của API đều hỗ trợ các kết nối proxy (fsockopen, fopen, cURL,).

Những điều về cấu hình proxy là chúng có nhiều loại và mỗi thiết lập khác nhau nên việc trả lời này trở nên khó khăn, thực sự không quan trọng nếu proxy của bạn nằm trên localhost hoặc remote, wp-config.phpcài đặt sẽ hoạt động bất kể. Thông thường, bạn muốn sử dụng các cài đặt này nếu trên mạng nội bộ / tường lửa có các yêu cầu cụ thể.

Điều đáng chú ý là bạn chỉ có thể đặt localhost / máy chủ web của mình sử dụng proxy / chuỗi theo mặc định cho các yêu cầu HTTP và trong trường hợp đó, không cần thiết phải đặt bất kỳ tùy chọn nào wp-config.phpvì điều này được định cấu hình ở cấp máy chủ. Nếu bạn tắt proxy của mình, bạn thường thấy mã phản hồi error 130 ERR_PROXY_CONNECTION_FAILED, nhưng các thiết lập này nằm ngoài phạm vi của WordPress.

Một số công cụ có thể giúp bạn thiết lập và gỡ lỗi kết nối proxy:

Để tìm hiểu về API HTTP của WordPress, tôi khuyên bạn nên sử dụng đoạn mã sau bằng cách sử dụng http_api_debughành động (được thay đổi để var_dumptìm thấy thông qua trang web của viper007bond):

add_action( 'http_api_debug', 'viper_http_api_debug', 10, 5 );

function viper_http_api_debug( $response, $type, $class, $args, $url ) {
    // You can change this from error_log() to var_dump() but it can break AJAX requests
    var_dump( 'Request URL: ' . var_export( $url, true ) );
    var_dump( 'Request Args: ' . var_export( $args, true ) );
    var_dump( 'Request Response : ' . var_export( $response, true ) );
}

Các yêu cầu đáp ứng là phần thú vị, đôi khi bạn có thể nói với một cái nhìn nhanh chóng nếu yêu cầu của bạn đang trải qua Proxy ..

Ví dụ: sử dụng API HTTP mặc định để thực hiện yêu cầu sau.

$api_url = 'http://api.wordpress.org/secret-key/1.0/';
$response = wp_remote_get($api_url);
$header = wp_remote_retrieve_headers( $response );

var_dump($header);

nhập mô tả hình ảnh ở đây

Bây giờ cùng một yêu cầu chính xác nhưng sử dụng proxy từ xa được kích hoạt qua wp-config.php

//I grabbed these off of Google search they will not work for long.
define( 'WP_PROXY_HOST', '210.22.115.162' );
define( 'WP_PROXY_PORT', '3128' );

nhập mô tả hình ảnh ở đây

Như bạn có thể thấy proxy, đầu ra là khác nhau, quan trọng nhất là proxy đang thêm viathẻ, trong trường hợp này là proxy mực. Proxy được cho là để làm điều này và không làm thay đổi tiêu đề phản hồi của máy chủ, nhưng không phải ai cũng tuân theo các quy tắc nên hãy cẩn thận;).

Hằng số define( 'WP_PROXY_BYPASS_HOSTS', 'localhost, www.example.com' )này rất hữu ích để cho phép truy cập vào các máy chủ mà bạn có thể không muốn thông qua proxy (ví dụ: cập nhật WordPress). Các ý kiến ​​trong đó class-http.phplà sai lệch vì theo mặc định localhostget_option('siteurl);đã được bao gồm nhưng có thể được thay đổi thông qua pre_http_send_through_proxybộ lọc.

Một số tùy chọn bổ sung hoạt động với cài đặt proxy là:
WP_HTTP_BLOCK_EXTERNAL WP_ACCESSIBLE_HOSTS

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.