{"id":73,"date":"2023-07-25T14:57:52","date_gmt":"2023-07-25T06:57:52","guid":{"rendered":"https:\/\/xuebuwan.cn\/?p=73"},"modified":"2023-07-25T14:57:52","modified_gmt":"2023-07-25T06:57:52","slug":"esp32-https%e5%ae%a2%e6%88%b7%e7%ab%afpost%e8%af%b7%e6%b1%82%ef%bc%88%e8%b7%b3%e8%bf%87%e8%af%81%e4%b9%a6%e9%aa%8c%e8%af%81%ef%bc%89","status":"publish","type":"post","link":"https:\/\/xuebuwan.cn\/index.php\/2023\/07\/25\/esp32-https%e5%ae%a2%e6%88%b7%e7%ab%afpost%e8%af%b7%e6%b1%82%ef%bc%88%e8%b7%b3%e8%bf%87%e8%af%81%e4%b9%a6%e9%aa%8c%e8%af%81%ef%bc%89\/","title":{"rendered":"ESP32 HTTPS\u5ba2\u6237\u7aefPOST\u8bf7\u6c42\uff08\u8df3\u8fc7\u8bc1\u4e66\u9a8c\u8bc1\uff09"},"content":{"rendered":"<p><!--\n * @Author: Memory\n * @Date: 2022-11-02 11:28:21\n * @LastEditors: Memory\n * @LastEditTime: 2022-11-28 00:17:17\n * @FilePath: \\undefinedd:\\Project\\Doc\\ESP32\\ESP32-ESP-IDF-HTTPS\u5ba2\u6237\u7aef\\ESP32-ESP-IDF-HTTPS\u5ba2\u6237\u7aef.md\n * @Description: \n   --><\/p>\n<h1>ESP32-ESP-IDF-HTTPS\u5ba2\u6237\u7aef<\/h1>\n<p>\u672c\u6587\u4f8b\u7a0b\u4e3aESP32 HTTPS\u5ba2\u6237\u7aefPOST\u8bf7\u6c42<br \/>\n\u53ea\u6709HTTPS\u8bf7\u6c42\u90e8\u5206\uff0c\u8054\u7f51\u90e8\u5206\u7701\u7565\u9ed8\u3002\u3002\u3002<\/p>\n<h2>\u53c2\u8003\u6587\u6863<\/h2>\n<p><a href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/zh_CN\/release-v4.1\/api-reference\/protocols\/esp_http_client.html\">\u4e50\u946bESP-IDF API\u53c2\u8003\u6587\u6863<\/a>  <\/p>\n<h2>\u6240\u7528API<\/h2>\n<h3>\u51fd\u6570 esp_http_client_init<\/h3>\n<pre><code class=\"language-c\">\/\/\u542f\u52a8HTTP\u94fe\u63a5\u5fc5\u987b\u5148\u8c03\u7528\u6b64\u51fd\u6570\uff0c\u8fd4\u56de\u503c\u4e3a\u4e3a\u4e00\u4e2a\u7ed3\u6784\u4f53\u5bf9\u8c61\uff0c\u4e5f\u662f\u5176\u5b83\u63a5\u53e3\u7684\u5fc5\u8981\u53c2\u6570\n\/\/\u5931\u8d25\u8fd4\u56deNULL\n\/\/\u51fd\u6570\u53c2\u6570\u4e3aconstesp_http_client_config_t\u7ed3\u6784\u4f53\u6307\u9488(\u6b64\u7ed3\u6784\u4f53\u7528\u4e8e\u914d\u7f6eHTTP\/HTTPS\u76f8\u5173\u53c2\u6570)\nesp_http_client_handle_t esp_http_client_init(constesp_http_client_config_t *config)<\/code><\/pre>\n<h3>\u7ed3\u6784\u4f53 constesp_http_client_config_t<\/h3>\n<p>\u6b64\u7ed3\u6784\u4f53\u7528\u4e8e\u914d\u7f6eHTTP\/HTTPS\u53c2\u6570   <\/p>\n<pre><code class=\"language-c\">\/\/ \u7ed3\u6784\u4f53\u6210\u5458\u5982\u4e0b\ntypedef struct {\n    const char                  *url;\/\/HTTP\/HTTPS\u7684url\u5730\u5740\n    const char                  *host;\/\/\u57df\u540d\u6216ip\uff08\u6b64\u9879\u53ef\u4e0d\u586b\uff09\n    int                         port;\/\/\u8bf7\u6c42\u7684\u7aef\u53e380\u6216443\uff08\u9ed8\u8ba4\u6b64\u9879\u53ef\u4e0d\u586b\uff09\n    const char                  *username;\/\/\u7528\u6237\u540d\u7528\u4e8eHTTP\u8eab\u4efd\u9a8c\u8bc1\uff08\u4e0d\u7528\u4e0d\u586b\uff09\n    const char                  *password;\/\/\u5bc6\u7801\u7528\u4e8eHTTP\u8eab\u4efd\u9a8c\u8bc1\uff08\u4e0d\u7528\u4e0d\u586b\uff09\n    esp_http_client_auth_type_t auth_type;\/\/HTTP\u8eab\u4efd\u9a8c\u8bc1\u7c7b\u578b\u9ed8\u8ba4\u4e3aHTTP_AUTH_TYPE_NONE\u5373\u65e0\u8eab\u4efd\u9a8c\u8bc1\uff08\u9ed8\u8ba4\u5373\u53ef\uff09\n    const char                  *path;\/\/HTTP\u8def\u5f84\u9ed8\u8ba4\u4e3a\/\uff08\u5ba2\u6237\u7aef\u65e0\u9700\u6b64\u9879\uff09\n    const char                  *query;\/\/HTTP\u67e5\u8be2\n    const char                  *cert_pem;\/\/\u670d\u52a1\u5668SSL\u8bc1\u4e66\uff08\u4f5c\u4e3aHTTPS\u670d\u52a1\u5668\u65f6\uff09\n    size_t                      cert_len;\/\/\u8bc1\u4e66\u957f\u5ea6\n    const char                  *client_cert_pem;\/\/\u5ba2\u6237\u7aefSSL\u8bc1\u4e66\uff08\u4f5c\u4e3a\u5ba2\u6237\u7aef\uff0c\u670d\u52a1\u5668\u9700\u8981\u9a8c\u8bc1\u8bc1\u4e66\u65f6\uff09\n    size_t                      client_cert_len;\/\/\u8bc1\u4e66\u957f\u5ea6\n    const char                  *client_key_pem;\/\/\u5ba2\u6237\u7aef\u8bc1\u4e66\u5bc6\u94a5\n    size_t                      client_key_len;\/\/\u5bc6\u94a5\u957f\u5ea6\n    const char                  *client_key_password;\/\/\u5bc6\u94a5\u5bc6\u7801\n    size_t                      client_key_password_len;\/\/\u5bc6\u7801\u957f\u5ea6\n    const char                  *user_agent;\/\/\u8981\u4e0e HTTP \u8bf7\u6c42\u4e00\u8d77\u53d1\u9001\u7684\u7528\u6237\u4ee3\u7406\u5b57\u7b26\u4e32\n    esp_http_client_method_t    method;\/\/\u8bf7\u6c42\u6a21\u5f0f\u9ed8\u8ba4\u4e3aHTTP_METHOD_GET\u5373GET\u65b9\u6cd5\u53ef\u6839\u636e\u9700\u8981\u8fdb\u884c\u4fee\u6539\uff0c\u4e5f\u53ef\u4ee5\u9ed8\u8ba4\u4e0d\u586b\u8bf7\u6c42\u65f6\u76f4\u63a5\u8c03\u7528\u63a5\u53e3\n    int                         timeout_ms;\/\/\u7f51\u7edc\u8d85\u65f6\u65f6\u95f4\n    bool                        disable_auto_redirect;\/\/\u7981\u7528HTTP\u81ea\u52a8\u91cd\u5b9a\u5411\n    int                         max_redirection_count;\/\/\u6700\u5927\u91cd\u5b9a\u5411\u6570\uff0c\u5982\u679c\u4e3a\u96f6\uff0c\u5219\u4f7f\u7528\u9ed8\u8ba4\u503c\n    int                         max_authorization_retries;\/\/\u63a5\u6536 HTTP \u672a\u6388\u6743\u72b6\u6001\u4ee3\u7801\u65f6\u7684\u6700\u5927\u8fde\u63a5\u91cd\u8bd5\u6b21\u6570\uff0c\u5982\u679c\u4e3a\u96f6\uff0c\u5219\u4f7f\u7528\u9ed8\u8ba4\u503c\u3002\u5982\u679c -1 \u5219\u7981\u7528\u6388\u6743\u91cd\u8bd5\n    http_event_handle_cb        event_handler;\/\/HTTP\u4e8b\u4ef6\u56de\u8c03\u51fd\u6570\uff08\u91cd\u8981\uff09\n    esp_http_client_transport_t transport_type;\/\/HTTP\u4f20\u8f93\u7c7b\u578b\u4f7f\u7528HTTP\u65f6\u586bHTTP_TRANSPORT_OVER_TCP\uff0c\u4f7f\u7528HTTPS\u65f6\u586bHTTP_TRANSPORT_OVER_SSL\n    int                         buffer_size;\/\/HTTP\u63a5\u6536\u7f13\u51b2\u533a\u5927\u5c0f\uff08\u4e00\u822c\u9ed8\u8ba4\u5373\u53ef\uff09\n    int                         buffer_size_tx;\/\/HTTP\u4f20\u8f93\u7f13\u51b2\u533a\u5927\u5c0f\n    void                        *user_data;\/\/HTTP user_data\u4e0a\u4e0b\u6587\n    bool                        is_async;\/\/\u8bbe\u7f6e\u5f02\u6b65\u6a21\u5f0f\uff0c\u76ee\u524d\u4ec5\u652f\u6301 HTTPS\n    bool                        use_global_ca_store;\/\/\n    bool                        skip_cert_common_name_check;\/\/\u8df3\u8fc7\u670d\u52a1\u5668\u8bc1\u4e66 CN \u5b57\u6bb5\u7684\u4efb\u4f55\u9a8c\u8bc1\uff08\u6ce8\u610f\u6b64\u5904\u6709\u5751\uff09\n    esp_err_t (*crt_bundle_attach)(void *conf);\/\/\u6307\u5411esp_crt_bundle_attach\u7684\u51fd\u6570\u6307\u9488\u3002\u5141\u8bb8\u4f7f\u7528\u8bc1\u4e66\u6346\u7ed1\u5305\u8fdb\u884c\u670d\u52a1\u5668\u9a8c\u8bc1\uff0c\u5fc5\u987b\u5728menuconfig\u4e2d\u542f\u7528\n    bool                        keep_alive_enable;\/\/\u542f\u7528\u4fdd\u6301\u6d3b\u52a8\u72b6\u6001\u8d85\u65f6\n    int                         keep_alive_idle;\/\/\u4fdd\u6301\u6d3b\u52a8\u7a7a\u95f2\u65f6\u95f4\u3002\u9ed8\u8ba4\u503c\u4e3a 5\uff08\u79d2\uff09\n    int                         keep_alive_interval;\/\/\u4fdd\u6301\u6d3b\u52a8\u95f4\u9694\u65f6\u95f4\u3002\u9ed8\u8ba4\u503c\u4e3a 5\uff08\u79d2\uff09\n    int                         keep_alive_count;\/\/\u4fdd\u6301\u6d3b\u52a8\u72b6\u6001\u6570\u636e\u5305\u91cd\u8bd5\u53d1\u9001\u8ba1\u6570\u3002\u9ed8\u8ba4\u503c\u4e3a 3 \u4e2a\u8ba1\u6570\n    struct ifreq                *if_name;\/\/\u8981\u901a\u8fc7\u7684\u6570\u636e\u7684\u63a5\u53e3\u7684\u540d\u79f0\u3002\u4f7f\u7528\u9ed8\u8ba4\u754c\u9762\u800c\u4e0d\u8bbe\u7f6e\n} esp_http_client_config_t;<\/code><\/pre>\n<h3>\u8bbe\u7f6eHTTP\/HTTPS\u8bf7\u6c42\u65b9\u6cd5<\/h3>\n<p>\u6b64\u63a5\u53e3\u53ef\u4ee5\u624b\u52a8\u8bbe\u7f6eHTTP\u8bf7\u6c42\u65b9\u5f0f\uff08\u53ef\u4ee5\u8986\u76d6\u914d\u7f6e\u7ed3\u6784\u4f53\u7684\u8bbe\u7f6e\uff09<\/p>\n<pre><code class=\"language-c\">\/\/client\u4e3aesp_http_client_init\u51fd\u6570\u8fd4\u56de\u7684\u7ed3\u6784\u4f53\u5bf9\u8c61\n\/\/method\u4e3a\u9700\u8981\u8bbe\u7f6e\u7684\u8bf7\u6c42\u65b9\u5f0fGET\u586bHTTP_METHOD_GET\uff0cPOST\u586bHTTP_METHOD_POST\uff0c\u8fd8\u6709\u5176\u5b83\u65b9\u5f0f\u4e0d\u4e00\u4e00\u5217\u4e3e\u4e86\uff0c\u53ef\u4ee5\u53bb\u8fd9\u4e2a\u679a\u4e3e\u7c7b\u578b\u91cc\u9762\u770b\n\/\/\u5931\u8d25\u8fd4\u56deESP_ERR_INVALID_ARG\nesp_err_t esp_http_client_set_method(esp_http_client_handle_t client, esp_http_client_method_t method)<\/code><\/pre>\n<h3>\u8bbe\u7f6e\u8bf7\u6c42\u5934\uff08\u5982\u679c\u9700\u8981\u7684\u8bdd\uff09<\/h3>\n<pre><code class=\"language-c\">\/\/client\u4e3aesp_http_client_init\u51fd\u6570\u8fd4\u56de\u7684\u7ed3\u6784\u4f53\u5bf9\u8c61\n\/\/key\u4e3a\u952e\uff0cvalude\u4e3a\u503c\uff0c\u4f8b\u5982esp_http_client_set_header(client, &quot;Content-Type&quot;, &quot;application\/json&quot;);\n\/\/\u5931\u8d25\u8fd4\u56deESP_FAIL\nesp_err_t esp_http_client_set_header(esp_http_client_handle_t client, const char *key, const char *value)<\/code><\/pre>\n<h3>\u8bbe\u7f6e\u8bf7\u6c42\u5185\u5bb9<\/h3>\n<p>\u6b64\u5904\u4e3aPOST\u8bf7\u6c42<\/p>\n<pre><code class=\"language-c\">\/\/client\u4e3aesp_http_client_init\u51fd\u6570\u8fd4\u56de\u7684\u7ed3\u6784\u4f53\u5bf9\u8c61\n\/\/data\u4e3a\u4f20\u8f93\u7684\u6570\u636e\u9996\u5730\u5740\n\/\/len\u4e3a\u6570\u636e\u957f\u5ea6\n\/\/\u5931\u8d25\u8fd4\u56deESP_FAIL\nesp_err_t esp_http_client_set_post_field(esp_http_client_handle_t client, const char *data, int len)<\/code><\/pre>\n<h3>\u53d1\u8d77HTTP\/HTTPS\u8bf7\u6c42<\/h3>\n<p>\u6b64\u63a5\u53e3\u9ed8\u8ba4\u4ee5\u963b\u585e\u65b9\u5f0f\u53d1\u8d77\u8bf7\u6c42<\/p>\n<pre><code class=\"language-c\">\/\/client\u4e3aesp_http_client_init\u51fd\u6570\u8fd4\u56de\u7684\u7ed3\u6784\u4f53\u5bf9\u8c61\n\/\/\u5931\u8d25\u8fd4\u56deESP_FAIL\nesp_err_t esp_http_client_perform(esp_http_client_handle_t client)<\/code><\/pre>\n<h3>\u5173\u95ed\u94fe\u63a5<\/h3>\n<p>\u6b64\u51fd\u6570\u653e\u5728\u6700\u540e\u8c03\u7528\uff0c\u529f\u80fd\u4e0eesp_http_client_init\u76f8\u53cd<\/p>\n<pre><code class=\"language-c\">\/\/client\u4e3aesp_http_client_init\u51fd\u6570\u8fd4\u56de\u7684\u7ed3\u6784\u4f53\u5bf9\u8c61\n\/\/\u5931\u8d25\u8fd4\u56deESP_FAIL\nesp_err_t esp_http_client_cleanup(esp_http_client_handle_t client)<\/code><\/pre>\n<h2>\u4f8b\u7a0b<\/h2>\n<pre><code class=\"language-c\">#include &quot;esp_system.h&quot;\n#include &quot;esp_tls.h&quot;\n\n#include &quot;esp_log.h&quot;\n#include &quot;freertos\/FreeRTOS.h&quot;\n#include &quot;freertos\/queue.h&quot;\n#include &quot;freertos\/semphr.h&quot;\n#include &quot;freertos\/task.h&quot;\n\nstatic const char *TAG = &quot;APP_HTTP&quot;;\n\n#define MAX_HTTP_RECV_BUFFER 512\n#define MAX_HTTP_OUTPUT_BUFFER 2048\n\nstatic esp_err_t _http_event_handler(esp_http_client_event_t *evt)\n{\n    switch (evt-&gt;event_id)\n    {\n    case HTTP_EVENT_ERROR:\n        \/\/\u5f53\u6267\u884c\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u4efb\u4f55\u9519\u8bef\u65f6\uff0c\u4f1a\u53d1\u751f\u6b64\u4e8b\u4ef6 \n        ESP_LOGD(TAG, &quot;HTTP_EVENT_ERROR&quot;);\n        break;\n    case HTTP_EVENT_ON_CONNECTED:\n        \/\/ \u4e00\u65e6 HTTP \u8fde\u63a5\u5230\u670d\u52a1\u5668\uff0c\u5c31\u4e0d\u4f1a\u6267\u884c\u4efb\u4f55\u6570\u636e\u4ea4\u6362\n        break;\n    case HTTP_EVENT_HEADER_SENT:\n        \/\/ \u5c06\u6240\u6709\u6807\u5934\u53d1\u9001\u5230\u670d\u52a1\u5668\u540e\u53d1\u751f\u6b64\u4e8b\u4ef6\n        break;\n    case HTTP_EVENT_ON_HEADER:\n        \/\/ \u5728\u63a5\u6536\u4ece\u670d\u52a1\u5668\u53d1\u9001\u7684\u6bcf\u4e2a\u6807\u5934\u65f6\u53d1\u751f\n        break;\n    case HTTP_EVENT_ON_DATA:\n        ESP_LOGI(TAG, &quot;HTTP_EVENT_ON_DATA, len=%d&quot;, evt-&gt;data_len);\n        \/\/\u5728\u6b64\u5904\u7406HTTP\u8bf7\u6c42\u8fd4\u56de\u7684\u6570\u636e\n        break;\n    case HTTP_EVENT_ON_FINISH:\n        \/\/ \u5b8c\u6210 HTTP \u4f1a\u8bdd\u65f6\u53d1\u751f\n        break;\n    case HTTP_EVENT_DISCONNECTED:\n        \/\/ \u8fde\u63a5\u65ad\u5f00\u65f6\u53d1\u751f\u6b64\u4e8b\u4ef6\n        break;\n    }\n    return ESP_OK;\n}\n\nstatic void http_rest_with_url(void *post_data)\n{\n    esp_err_t err;\n    esp_http_client_config_t config1 = {\n        .url = &quot;https:\/\/www.baidu.com&quot;,\n        .transport_type = HTTP_TRANSPORT_OVER_SSL,\n        .skip_cert_common_name_check = true,\n        \/\/ .port = 443,\n        .event_handler = _http_event_handler,\n    };\n    esp_http_client_handle_t client = esp_http_client_init(&amp;config1);\n\n    \/\/ POST\u8bf7\u6c42\n    esp_http_client_set_method(client, HTTP_METHOD_POST);\n    esp_http_client_set_header(client, &quot;Content-Type&quot;, &quot;application\/json&quot;);\n    esp_http_client_set_post_field(client, post_data, strlen(post_data));\n    err = esp_http_client_perform(client);\n    if (err == ESP_OK)\n    {\n        ESP_LOGI(TAG, &quot;Status = %d, content_length = %d&quot;, esp_http_client_get_status_code(client),\n                 esp_http_client_get_content_length(client));\n    }\n    else\n    {\n        ESP_LOGE(TAG, &quot;HTTP POST request failed: %s&quot;, esp_err_to_name(err));\n    }\n    free(post_data);\n    esp_http_client_cleanup(client);\n}\n<\/code><\/pre>\n<h2>\u586b\u5751<\/h2>\n<p>ESP32\u505a\u4e3a\u5ba2\u6237\u7aef\u8fdb\u884cHTTPS\u8bf7\u6c42\u65f6\uff0c\u5982\u679c\u4e0d\u9700\u8981\u9a8c\u8bc1\u670d\u52a1\u5668\u8bc1\u4e66\u4e5f\u5c31\u662f\u60f3\u8df3\u8fc7\u8bc1\u4e66\u9a8c\u8bc1\uff0c<br \/>\n\u6539constesp_http_client_config_t\u7ed3\u6784\u4f53\u4e2dskip_cert_common_name_check\u6210\u5458\u662f\u6ca1\u6709\u6548\u679c\u7684\u3002<br \/>\n\u4ed6\u53ea\u4f1a\u8df3\u8fc7\u68c0\u67e5\u8bc1\u4e66\u7684CN\u800c\u4e0d\u662fCA\uff0c\u4e0d\u4f1a\u8df3\u8fc7\u6574\u4e2a\u8bc1\u4e66\u9a8c\u8bc1\u3002<br \/>\n\u6240\u4ee5\u5982\u679c\u60f3\u8df3\u8fc7\u8bc1\u4e66\u5219\u9700\u8981\u5728menuconfig\u91cc\u9762\u4fee\u6539ESP-TLS\u9009\u9879\uff0c\u6539\u4e3a\u9ed8\u8ba4\u8df3\u8fc7\u670d\u52a1\u5668\u8bc1\u4e66\u5982\u4e0b\u56fe<br \/>\n<div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/image.xuebuwan.cn\/i\/2022\/11\/28\/63838a1677b25.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/image.xuebuwan.cn\/i\/2022\/11\/28\/63838a1677b25.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\u5fae\u4fe1\u622a\u56fe_20221128000143.png\" \/><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>ESP32-ESP-IDF-HTTPS\u5ba2\u6237\u7aef \u672c\u6587\u4f8b\u7a0b\u4e3aESP32 HTTPS\u5ba2\u6237\u7aefPOST\u8bf7\u6c42 \u53ea\u6709HTTP [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27],"tags":[28,29,30],"class_list":["post-73","post","type-post","status-publish","format-standard","hentry","category-esp32","tag-esp32","tag-https","tag-post"],"_links":{"self":[{"href":"https:\/\/xuebuwan.cn\/index.php\/wp-json\/wp\/v2\/posts\/73","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/xuebuwan.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/xuebuwan.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/xuebuwan.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/xuebuwan.cn\/index.php\/wp-json\/wp\/v2\/comments?post=73"}],"version-history":[{"count":1,"href":"https:\/\/xuebuwan.cn\/index.php\/wp-json\/wp\/v2\/posts\/73\/revisions"}],"predecessor-version":[{"id":74,"href":"https:\/\/xuebuwan.cn\/index.php\/wp-json\/wp\/v2\/posts\/73\/revisions\/74"}],"wp:attachment":[{"href":"https:\/\/xuebuwan.cn\/index.php\/wp-json\/wp\/v2\/media?parent=73"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/xuebuwan.cn\/index.php\/wp-json\/wp\/v2\/categories?post=73"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/xuebuwan.cn\/index.php\/wp-json\/wp\/v2\/tags?post=73"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}