
7折
减价出售
¥799
wp_remote_post
是WordPress HTTP API的核心函数,专门用于发送HTTP POST请求。相比直接使用PHP的curl或file_get_contents,它提供了更安全、更WordPress化的请求方式。
$response = wp_remote_post(
$url, // 目标URL
[
'method' => 'POST', // 请求方法
'timeout' => 45, // 超时时间(秒)
'redirection' => 5, // 最大重定向次数
'httpversion' => '1.1', // HTTP版本
'blocking' => true, // 是否阻塞等待响应
'headers' => [], // 请求头
'body' => [], // 请求体
'cookies' => [] // Cookie数据
]
);
$headers = [
'Authorization' => 'Bearer ' . $api_key,
'Content-Type' => 'application/json',
'Cache-Control' => 'no-cache',
'X-Custom-Header' => 'WordPress API Client'
];
function send_authenticated_request($endpoint, $data) {
$api_url = 'https://api.example.com/v1/' . $endpoint;
$auth_token = get_option('api_auth_token');
$response = wp_remote_post($api_url, [
'headers' => [
'Authorization' => 'Bearer ' . $auth_token,
'Content-Type' => 'application/json'
],
'body' => json_encode($data),
'timeout' => 30
]);
if (is_wp_error($response)) {
error_log('API请求失败: ' . $response->get_error_message());
return false;
}
$body = wp_remote_retrieve_body($response);
return json_decode($body, true);
}
add_action('wp_ajax_submit_contact_form', 'handle_contact_form');
add_action('wp_ajax_nopriv_submit_contact_form', 'handle_contact_form');
function handle_contact_form() {
// 验证nonce
if (!check_ajax_referer('contact_form_nonce', 'security', false)) {
wp_send_json_error('无效的请求');
}
// 准备转发数据
$form_data = [
'name' => sanitize_text_field($_POST['name']),
'email' => sanitize_email($_POST['email']),
'message' => sanitize_textarea_field($_POST['message']),
'source' => 'WordPress网站'
];
// 转发到CRM系统
$crm_response = wp_remote_post('https://crm.example.com/api/leads', [
'headers' => [
'Content-Type' => 'application/json',
'API-Key' => 'your_crm_api_key'
],
'body' => json_encode($form_data)
]);
// 处理响应
if (!is_wp_error($crm_response)) {
$response_code = wp_remote_retrieve_response_code($crm_response);
if ($response_code === 201) {
wp_send_json_success('表单提交成功');
} else {
wp_send_json_error('CRM系统处理失败');
}
} else {
wp_send_json_error('连接CRM系统失败');
}
}
function safe_remote_post($url, $args = []) {
$defaults = [
'timeout' => 30,
'redirection' => 3
];
$args = wp_parse_args($args, $defaults);
$response = wp_remote_post($url, $args);
if (is_wp_error($response)) {
return [
'success' => false,
'error_code' => $response->get_error_code(),
'error_message' => $response->get_error_message(),
'error_data' => $response->get_error_data()
];
}
$response_code = wp_remote_retrieve_response_code($response);
$body = wp_remote_retrieve_body($response);
return [
'success' => $response_code >= 200 && $response_code < 300,
'status_code' => $response_code,
'headers' => wp_remote_retrieve_headers($response),
'body' => json_decode($body, true) ?: $body
];
}
function log_remote_request($url, $args, $response) {
$log_entry = [
'timestamp' => current_time('mysql'),
'request' => [
'url' => $url,
'method' => 'POST',
'headers' => $args['headers'] ?? [],
'body' => is_array($args['body'] ?? null) ? $args['body'] : substr($args['body'] ?? '', 0, 1000)
],
'response' => is_wp_error($response) ? [
'error' => $response->get_error_message()
] : [
'code' => wp_remote_retrieve_response_code($response),
'body' => substr(wp_remote_retrieve_body($response), 0, 1000)
]
];
error_log('HTTP请求日志: ' . print_r($log_entry, true));
}
// 使用示例
$response = wp_remote_post($url, $args);
log_remote_request($url, $args, $response);
function cached_remote_post($url, $args, $cache_key, $expiration = HOUR_IN_SECONDS) {
$cached = get_transient($cache_key);
if (false !== $cached) {
return $cached;
}
$response = wp_remote_post($url, $args);
if (!is_wp_error($response) && wp_remote_retrieve_response_code($response) === 200) {
$body = wp_remote_retrieve_body($response);
set_transient($cache_key, $body, $expiration);
return $body;
}
return $response;
}
function batch_remote_requests($requests) {
$multi_handle = curl_multi_init();
$handles = [];
foreach ($requests as $key => $request) {
$handles[$key] = curl_init($request['url']);
curl_setopt_array($handles[$key], [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => $this->prepare_headers($request['headers']),
CURLOPT_POSTFIELDS => is_array($request['body']) ? http_build_query($request['body']) : $request['body'],
CURLOPT_TIMEOUT => $request['timeout'] ?? 30
]);
curl_multi_add_handle($multi_handle, $handles[$key]);
}
$running = null;
do {
curl_multi_exec($multi_handle, $running);
} while ($running);
$responses = [];
foreach ($handles as $key => $handle) {
$responses[$key] = [
'body' => curl_multi_getcontent($handle),
'code' => curl_getinfo($handle, CURLINFO_HTTP_CODE)
];
curl_multi_remove_handle($multi_handle, $handle);
}
curl_multi_close($multi_handle);
return $responses;
}
function sanitize_request_data($data) {
if (is_array($data)) {
return array_map('sanitize_request_data', $data);
}
if (is_string($data)) {
// 根据数据类型选择消毒方法
if (filter_var($data, FILTER_VALIDATE_EMAIL)) {
return sanitize_email($data);
} elseif (filter_var($data, FILTER_VALIDATE_URL)) {
return esc_url_raw($data);
} else {
return sanitize_text_field($data);
}
}
return $data;
}
// 使用示例
$clean_data = sanitize_request_data($_POST);
$response = wp_remote_post($url, [
'body' => $clean_data
]);
function secure_remote_post($url, $args = []) {
$defaults = [
'sslverify' => true, // 启用SSL验证
'sslcertificates' => ABSPATH . WPINC . '/certificates/ca-bundle.crt',
'timeout' => 30,
'headers' => [
'X-WP-Security' => '1'
]
];
$args = wp_parse_args($args, $defaults);
// 强制HTTPS协议
if (strpos($url, 'https://') !== 0) {
return new WP_Error('insecure_protocol', '只允许HTTPS请求');
}
return wp_remote_post($url, $args);
}
class Custom_Payment_Gateway extends WC_Payment_Gateway {
public function process_payment($order_id) {
$order = wc_get_order($order_id);
$payload = [
'amount' => $order->get_total(),
'currency' => $order->get_currency(),
'order_id' => $order_id,
'customer' => [
'email' => $order->get_billing_email(),
'name' => $order->get_billing_first_name() . ' ' . $order->get_billing_last_name()
]
];
$response = wp_remote_post($this->gateway_url, [
'headers' => [
'Authorization' => 'Basic ' . base64_encode($this->api_key . ':'),
'Content-Type' => 'application/json'
],
'body' => json_encode($payload),
'timeout' => 30
]);
if (is_wp_error($response)) {
wc_add_notice('支付处理失败,请重试或联系客服', 'error');
return;
}
$body = json_decode(wp_remote_retrieve_body($response), true);
if (isset($body['payment_url'])) {
return [
'result' => 'success',
'redirect' => $body['payment_url']
];
}
wc_add_notice('支付初始化失败: ' . ($body['message'] ?? '未知错误'), 'error');
return;
}
}
function sync_to_crm($user_id) {
$user = get_userdata($user_id);
$crm_data = [
'name' => $user->display_name,
'email' => $user->user_email,
'wordpress_id' => $user_id,
'meta' => [
'company' => get_user_meta($user_id, 'billing_company', true),
'phone' => get_user_meta($user_id, 'billing_phone', true)
]
];
$response = wp_remote_post('https://crm.example.com/api/users', [
'headers' => [
'Content-Type' => 'application/json',
'X-API-KEY' => defined('CRM_API_KEY') ? CRM_API_KEY : ''
],
'body' => json_encode($crm_data)
]);
if (!is_wp_error($response)) {
$status_code = wp_remote_retrieve_response_code($response);
if ($status_code === 201) {
$body = json_decode(wp_remote_retrieve_body($response), true);
update_user_meta($user_id, 'crm_id', $body['id']);
return true;
}
}
// 失败时加入队列稍后重试
$failed_syncs = get_option('failed_crm_syncs', []);
$failed_syncs[] = $user_id;
update_option('failed_crm_syncs', $failed_syncs);
return false;
}
function resilient_remote_post($url, $args, $max_retries = 3) {
$retry_count = 0;
$last_error = null;
while ($retry_count < $max_retries) {
$response = wp_remote_post($url, $args);
if (!is_wp_error($response)) {
return $response;
}
$last_error = $response;
$retry_count++;
// 指数退避算法
sleep(pow(2, $retry_count));
}
return $last_error;
}
function send_signed_request($url, $data, $secret_key) {
$timestamp = time();
$nonce = wp_generate_password(16, false);
$body = json_encode($data);
$signature = hash_hmac('sha256', $timestamp . $nonce . $body, $secret_key);
return wp_remote_post($url, [
'headers' => [
'Content-Type' => 'application/json',
'X-Timestamp' => $timestamp,
'X-Nonce' => $nonce,
'X-Signature' => $signature
],
'body' => $body
]);
}
function verify_request_signature($request) {
$timestamp = $request->get_header('X-Timestamp');
$nonce = $request->get_header('X-Nonce');
$signature = $request->get_header('X-Signature');
$body = $request->get_body();
$expected = hash_hmac('sha256', $timestamp . $nonce . $body, SECRET_KEY);
if (!hash_equals($expected, $signature)) {
return new WP_Error('invalid_signature', '请求签名验证失败', ['status' => 401]);
}
// 防止重放攻击
if (time() - $timestamp > 300) {
return new WP_Error('stale_request', '请求已过期', ['status' => 401]);
}
return true;
}
通过以上全面的技术解析,wp_remote_post
展现了其作为WordPress主题核心HTTP请求工具的强大能力。从基础请求到高级安全实践,从错误处理到性能优化,合理运用这些技术可以构建出稳定可靠的远程通信系统,满足各种第三方API集成需求。
减价出售
减价出售
减价出售
减价出售
电话咨询
1855-626-3292
微信咨询