{"id":4235,"date":"2025-07-12T15:16:58","date_gmt":"2025-07-12T07:16:58","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/wpcms\/?p=4235"},"modified":"2025-07-12T15:19:49","modified_gmt":"2025-07-12T07:19:49","slug":"wordpress-%e6%8f%92%e4%bb%b6%e4%b8%ad%e9%80%9a%e8%bf%87-http-%e8%af%b7%e6%b1%82%e8%8e%b7%e5%8f%96%e6%96%87%e7%ab%a0%e7%9a%84%e6%95%b4%e9%a1%b5%e6%ba%90%e7%a0%81","status":"publish","type":"post","link":"https:\/\/www.zhaozhao123.cn\/wpcms\/post\/4235.html","title":{"rendered":"WordPress \u63d2\u4ef6\u4e2d\u901a\u8fc7 HTTP \u8bf7\u6c42\u83b7\u53d6\u6587\u7ae0\u7684\u6574\u9875\u6e90\u7801"},"content":{"rendered":"\n<p>\u5728 WordPress \u63d2\u4ef6\u4e2d\u901a\u8fc7 HTTP \u8bf7\u6c42\u83b7\u53d6\u6587\u7ae0\u7684\u6574\u9875\u6e90\u7801\uff0c\u53ef\u4ee5\u4f7f\u7528 WordPress \u5185\u7f6e\u7684 HTTP API \u6216 PHP \u7684 cURL \u5b9e\u73b0\u3002\u4ee5\u4e0b\u662f\u4e24\u79cd\u53ef\u9760\u7684\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u65b9\u6cd5 1\uff1a\u4f7f\u7528 WordPress HTTP API\uff08\u63a8\u8350\uff09<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n * \u901a\u8fc7\u865a\u62dfHTTP\u8bf7\u6c42\u83b7\u53d6\u6587\u7ae0\u6574\u9875HTML\u6e90\u7801\n * @param string $url \u6587\u7ae0\u5b8c\u6574URL\n * @return string|false \u6210\u529f\u8fd4\u56deHTML\u6e90\u7801\uff0c\u5931\u8d25\u8fd4\u56defalse\n *\/\nfunction get_post_html_via_http($url) {\n    \/\/ \u53d1\u9001HTTP\u8bf7\u6c42\n    $response = wp_remote_get($url, array(\n        'timeout'    =&gt; 30, \/\/ \u8d85\u65f6\u65f6\u95f4\uff08\u79d2\uff09\n        'sslverify' =&gt; false, \/\/ \u8df3\u8fc7SSL\u9a8c\u8bc1\uff08\u9002\u7528\u4e8e\u672c\u5730\u5f00\u53d1\uff09\n        'user-agent' =&gt; 'Mozilla\/5.0 (WordPress Plugin; Virtual HTTP Request)',\n    ));\n\n    \/\/ \u68c0\u67e5\u8bf7\u6c42\u7ed3\u679c\n    if (is_wp_error($response)) {\n        error_log('HTTP\u8bf7\u6c42\u5931\u8d25: ' . $response-&gt;get_error_message());\n        return false;\n    }\n\n    \/\/ \u68c0\u67e5HTTP\u72b6\u6001\u7801\n    $response_code = wp_remote_retrieve_response_code($response);\n    if ($response_code !== 200) {\n        error_log(\"HTTP\u9519\u8bef\u72b6\u6001\u7801: {$response_code}\");\n        return false;\n    }\n\n    \/\/ \u8fd4\u56deHTML\u6e90\u7801\n    return wp_remote_retrieve_body($response);\n}\n\n\/\/ \u4f7f\u7528\u793a\u4f8b\n$post_url = 'https:\/\/example.com\/hello-world\/';\n$html_content = get_post_html_via_http($post_url);\nif ($html_content) {\n    \/\/ \u6210\u529f\u83b7\u53d6\u6e90\u7801\n} else {\n    \/\/ \u5904\u7406\u5931\u8d25\u60c5\u51b5\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u65b9\u6cd5 2\uff1a\u4f7f\u7528 PHP cURL\uff08\u9700\u670d\u52a1\u5668\u652f\u6301\uff09<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>function get_post_html_via_curl($url) {\n    $ch = curl_init();\n    curl_setopt_array($ch, &#91;\n        CURLOPT_URL =&gt; $url,\n        CURLOPT_RETURNTRANSFER =&gt; true,\n        CURLOPT_FOLLOWLOCATION =&gt; true,\n        CURLOPT_MAXREDIRS =&gt; 5,\n        CURLOPT_TIMEOUT =&gt; 30,\n        CURLOPT_SSL_VERIFYPEER =&gt; false,\n        CURLOPT_USERAGENT =&gt; 'Mozilla\/5.0 (WordPress Plugin; Virtual HTTP Request)',\n    ]);\n\n    $html = curl_exec($ch);\n    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n    $error = curl_error($ch);\n    curl_close($ch);\n\n    if ($http_code !== 200 || !empty($error)) {\n        error_log(\"cURL\u8bf7\u6c42\u5931\u8d25: {$error} | HTTP\u72b6\u6001\u7801: {$http_code}\");\n        return false;\n    }\n\n    return $html;\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u5173\u952e\u6ce8\u610f\u4e8b\u9879<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u7528\u6237\u4ee3\u7406\u8bbe\u7f6e<\/strong><br>\u6dfb\u52a0\u81ea\u5b9a\u4e49 User-Agent \u907f\u514d\u88ab\u670d\u52a1\u5668\u62e6\u622a\uff08\u5982 <code>WordPress Plugin Virtual Request<\/code>\uff09<\/li>\n\n\n\n<li><strong>\u672c\u5730\u73af\u5883\u7279\u6b8a\u5904\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   \/\/ \u672c\u5730\u5f00\u53d1\u65f6\u8df3\u8fc7SSL\u9a8c\u8bc1\uff08\u751f\u4ea7\u73af\u5883\u5e94\u542f\u7528\uff09\n   add_filter('https_ssl_verify', '__return_false');\n   add_filter('https_local_ssl_verify', '__return_false');<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u7f13\u5b58\u673a\u5236<\/strong>\uff08\u63d0\u5347\u6027\u80fd\uff09<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   \/\/ \u6dfb\u52a0\u7f13\u5b58\u793a\u4f8b\uff08\u7f13\u5b581\u5c0f\u65f6\uff09\n   $cache_key = 'post_html_' . md5($url);\n   $cached = get_transient($cache_key);\n   if ($cached) return $cached;\n\n   $html = get_post_html_via_http($url);\n   if ($html) set_transient($cache_key, $html, HOUR_IN_SECONDS);<\/code><\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u6743\u9650\u9a8c\u8bc1<\/strong><br>\u5982\u679c\u76ee\u6807\u6587\u7ae0\u9700\u8981\u767b\u5f55\u8bbf\u95ee\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   \/\/ \u6dfb\u52a0Cookie\u4f20\u9012\uff08\u793a\u4f8b\uff09\n   $cookies = &#91;];\n   foreach ($_COOKIE as $name =&gt; $value) {\n       $cookies&#91;] = \"$name=\" . urlencode($value);\n   }\n   $options&#91;'headers'] = &#91;'Cookie: ' . implode('; ', $cookies)];<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b8c\u6574\u63d2\u4ef6\u5b9e\u73b0\u5efa\u8bae<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>\/*\nPlugin Name: Post HTML Fetcher\nDescription: \u901a\u8fc7\u865a\u62dfHTTP\u8bf7\u6c42\u83b7\u53d6\u6587\u7ae0\u6574\u9875\u6e90\u7801\n*\/\nadd_action('admin_menu', function() {\n    add_management_page(\n        '\u83b7\u53d6\u6587\u7ae0\u6e90\u7801', \n        '\u6587\u7ae0\u6e90\u7801\u5de5\u5177', \n        'manage_options', \n        'post-html-fetcher',\n        'render_fetcher_page'\n    );\n});\n\nfunction render_fetcher_page() {\n    \/\/ \u5b89\u5168\u9a8c\u8bc1\n    if (!current_user_can('manage_options')) return;\n\n    $html = '';\n    if (isset($_POST&#91;'fetch_url'])) {\n        check_admin_referer('fetch_html_action');\n        $html = get_post_html_via_http(esc_url_raw($_POST&#91;'fetch_url']));\n    }\n    ?&gt;\n    &lt;div class=\"wrap\"&gt;\n        &lt;h1&gt;\u83b7\u53d6\u6587\u7ae0HTML\u6e90\u7801&lt;\/h1&gt;\n        &lt;form method=\"post\"&gt;\n            &lt;?php wp_nonce_field('fetch_html_action'); ?&gt;\n            &lt;input type=\"url\" name=\"fetch_url\" required \n                   placeholder=\"https:\/\/example.com\/your-post\/\" style=\"width:70%\"&gt;\n            &lt;button type=\"submit\" class=\"button button-primary\"&gt;\u83b7\u53d6\u6e90\u7801&lt;\/button&gt;\n        &lt;\/form&gt;\n\n        &lt;?php if ($html) : ?&gt;\n        &lt;textarea rows=\"25\" style=\"width:100%; margin-top:20px\"&gt;&lt;?= esc_textarea($html) ?&gt;&lt;\/textarea&gt;\n        &lt;?php endif; ?&gt;\n    &lt;\/div&gt;\n    &lt;?php\n}\n\n\/\/ \u6b64\u5904\u63d2\u5165\u524d\u9762\u7684get_post_html_via_http\u51fd\u6570<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u5e38\u89c1\u95ee\u9898\u89e3\u51b3\u65b9\u6848<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>403\u7981\u6b62\u8bbf\u95ee<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6dfb\u52a0<code>referer<\/code>\u8bf7\u6c42\u5934\uff1a<code>'headers' => ['Referer' => site_url()]<\/code><\/li>\n\n\n\n<li>\u4f7f\u7528WP REST API\u66ff\u4ee3\uff1a<code>\/wp-json\/wp\/v2\/posts\/&lt;id>?context=edit<\/code><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6027\u80fd\u4f18\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   \/\/ \u9650\u5236\u6bcf\u5206\u949f\u8bf7\u6c42\u6b21\u6570\n   $transient_key = 'html_fetch_rate_limit';\n   if (get_transient($transient_key)) {\n       wp_die('\u8bf7\u6c42\u8fc7\u4e8e\u9891\u7e41\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5');\n   }\n   set_transient($transient_key, true, MINUTE_IN_SECONDS);<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u5927\u6587\u4ef6\u5904\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   \/\/ \u589e\u52a0\u8d85\u65f6\u65f6\u95f4\n   $options&#91;'timeout'] = 120;\n   \/\/ \u5206\u6bb5\u8bfb\u53d6\n   curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($ch, $data) {\n       file_put_contents($tmp_file, $data, FILE_APPEND);\n       return strlen($data);\n   });<\/code><\/pre>\n\n\n\n<p>\u8fd9\u4e9b\u65b9\u6cd5\u5b8c\u5168\u9075\u5faa WordPress \u63d2\u4ef6\u5f00\u53d1\u6807\u51c6\uff0c\u517c\u5bb9\u5404\u79cd\u4e3b\u673a\u73af\u5883\uff0c\u5e76\u5904\u7406\u4e86\u5b89\u5168\u9a8c\u8bc1\u3001\u9519\u8bef\u65e5\u5fd7\u3001\u6027\u80fd\u4f18\u5316\u7b49\u5173\u952e\u95ee\u9898\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5728 WordPress \u63d2\u4ef6\u4e2d\u901a\u8fc7 HTTP \u8bf7\u6c42\u83b7\u53d6\u6587\u7ae0\u7684\u6574\u9875\u6e90\u7801\uff0c\u53ef\u4ee5\u4f7f\u7528 WordPress \u5185\u7f6e\u7684 HTTP API \u6216 PHP \u7684 cURL \u5b9e\u73b0\u3002\u4ee5\u4e0b\u662f\u4e24\u79cd\u53ef\u9760\u7684\u65b9\u6cd5\uff1a \u65b9\u6cd5 1\uff1a\u4f7f\u7528 WordPress HTTP API\uff08\u63a8\u8350\uff09 \u65b9\u6cd5 2\uff1a\u4f7f\u7528 PHP cURL\uff08\u9700\u670d\u52a1\u5668\u652f\u6301\uff09 \u5173\u952e\u6ce8\u610f\u4e8b\u9879 \u5b8c\u6574\u63d2\u4ef6\u5b9e\u73b0..<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[3205],"tags":[3204],"tuisongtax":[],"class_list":["post-4235","post","type-post","status-publish","format-standard","hentry","category-kaifawenzhang","tag-hqzyym"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.zhaozhao123.cn\/wpcms\/wp-json\/wp\/v2\/posts\/4235","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhaozhao123.cn\/wpcms\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.zhaozhao123.cn\/wpcms\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/wpcms\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/wpcms\/wp-json\/wp\/v2\/comments?post=4235"}],"version-history":[{"count":0,"href":"https:\/\/www.zhaozhao123.cn\/wpcms\/wp-json\/wp\/v2\/posts\/4235\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.zhaozhao123.cn\/wpcms\/wp-json\/wp\/v2\/media?parent=4235"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/wpcms\/wp-json\/wp\/v2\/categories?post=4235"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/wpcms\/wp-json\/wp\/v2\/tags?post=4235"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/wpcms\/wp-json\/wp\/v2\/tuisongtax?post=4235"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}