{"id":167046,"date":"2020-01-01T13:03:42","date_gmt":"2020-01-01T05:03:42","guid":{"rendered":"https:\/\/lrxjmw.cn\/?p=167046"},"modified":"2019-12-23T11:04:39","modified_gmt":"2019-12-23T03:04:39","slug":"introduction-to-python3","status":"publish","type":"post","link":"https:\/\/lrxjmw.cn\/introduction-to-python3.html","title":{"rendered":"Python3 \u7f51\u7edc\u7f16\u7a0b\u4ecb\u7ecd"},"content":{"rendered":"\n\n\n
\u5bfc\u8bfb<\/td>\nPython \u63d0\u4f9b\u4e86\u4e24\u4e2a\u7ea7\u522b\u8bbf\u95ee\u7684\u7f51\u7edc\u670d\u52a1\uff1a\u9ad8\u7ea7\u522b\u4e0e\u4f4e\u7ea7\u522b\u3002<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n

\"\"<\/p>\n

\u4f4e\u7ea7\u522b\u7684\u7f51\u7edc\u670d\u52a1\u652f\u6301\u57fa\u672c\u7684 Socket\uff0c\u5b83\u63d0\u4f9b\u4e86\u6807\u51c6\u7684 BSD Sockets API\uff0c\u53ef\u4ee5\u8bbf\u95ee\u5e95\u5c42\u64cd\u4f5c\u7cfb\u7edfSocket\u63a5\u53e3\u7684\u5168\u90e8\u65b9\u6cd5\u3002
\n\u9ad8\u7ea7\u522b\u7684\u7f51\u7edc\u670d\u52a1\u6a21\u5757 SocketServer\uff0c \u5b83\u63d0\u4f9b\u4e86\u670d\u52a1\u5668\u4e2d\u5fc3\u7c7b\uff0c\u53ef\u4ee5\u7b80\u5316\u7f51\u7edc\u670d\u52a1\u5668\u7684\u5f00\u53d1\u3002<\/p>\n

\u4ec0\u4e48\u662f Socket?<\/strong><\/div>\n

Socket\u53c8\u79f0\"\u5957\u63a5\u5b57\"\uff0c\u5e94\u7528\u7a0b\u5e8f\u901a\u5e38\u901a\u8fc7\"\u5957\u63a5\u5b57\"\u5411\u7f51\u7edc\u53d1\u51fa\u8bf7\u6c42\u6216\u8005\u5e94\u7b54\u7f51\u7edc\u8bf7\u6c42\uff0c\u4f7f\u4e3b\u673a\u95f4\u6216\u8005\u4e00\u53f0\u8ba1\u7b97\u673a\u4e0a\u7684\u8fdb\u7a0b\u95f4\u53ef\u4ee5\u901a\u8baf\u3002<\/p>\n

socket()\u51fd\u6570<\/strong><\/span><\/div>\n

Python \u4e2d\uff0c\u6211\u4eec\u7528 socket\uff08\uff09\u51fd\u6570\u6765\u521b\u5efa\u5957\u63a5\u5b57\uff0c\u8bed\u6cd5\u683c\u5f0f\u5982\u4e0b\uff1a<\/p>\n

socket.socket([family[, type[, proto]]])<\/pre>\n

\u53c2\u6570<\/strong><\/p>\n

family: \u5957\u63a5\u5b57\u5bb6\u65cf\u53ef\u4ee5\u4f7fAF_UNIX\u6216\u8005AF_INET<\/p>\n

type: \u5957\u63a5\u5b57\u7c7b\u578b\u53ef\u4ee5\u6839\u636e\u662f\u9762\u5411\u8fde\u63a5\u7684\u8fd8\u662f\u975e\u8fde\u63a5\u5206\u4e3aSOCK_STREAM\u6216SOCK_DGRAM<\/p>\n

protocol: \u4e00\u822c\u4e0d\u586b\u9ed8\u8ba4\u4e3a0.<\/p>\n

Socket \u5bf9\u8c61(\u5185\u5efa)\u65b9\u6cd5<\/p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\u51fd\u6570<\/th>\n\u63cf\u8ff0<\/th>\n<\/tr>\n<\/thead>\n
\u670d\u52a1\u5668\u7aef\u5957\u63a5\u5b57<\/td>\n<\/tr>\n
s.bind()<\/td>\n\u7ed1\u5b9a\u5730\u5740\uff08host,port\uff09\u5230\u5957\u63a5\u5b57\uff0c \u5728AF_INET\u4e0b,\u4ee5\u5143\u7ec4\uff08host,port\uff09\u7684\u5f62\u5f0f\u8868\u793a\u5730\u5740\u3002<\/td>\n<\/tr>\n
s.listen()<\/td>\n\u5f00\u59cbTCP\u76d1\u542c\u3002backlog\u6307\u5b9a\u5728\u62d2\u7edd\u8fde\u63a5\u4e4b\u524d\uff0c\u64cd\u4f5c\u7cfb\u7edf\u53ef\u4ee5\u6302\u8d77\u7684\u6700\u5927\u8fde\u63a5\u6570\u91cf\u3002\u8be5\u503c\u81f3\u5c11\u4e3a1\uff0c\u5927\u90e8\u5206\u5e94\u7528\u7a0b\u5e8f\u8bbe\u4e3a5\u5c31\u53ef\u4ee5\u4e86\u3002<\/td>\n<\/tr>\n
s.accept()<\/td>\n\u88ab\u52a8\u63a5\u53d7TCP\u5ba2\u6237\u7aef\u8fde\u63a5,(\u963b\u585e\u5f0f)\u7b49\u5f85\u8fde\u63a5\u7684\u5230\u6765<\/td>\n<\/tr>\n
\u5ba2\u6237\u7aef\u5957\u63a5\u5b57<\/td>\n<\/tr>\n
s.connect()<\/td>\n\u4e3b\u52a8\u521d\u59cb\u5316TCP\u670d\u52a1\u5668\u8fde\u63a5\uff0c\u3002\u4e00\u822caddress\u7684\u683c\u5f0f\u4e3a\u5143\u7ec4\uff08hostname,port\uff09\uff0c\u5982\u679c\u8fde\u63a5\u51fa\u9519\uff0c\u8fd4\u56desocket.error\u9519\u8bef\u3002<\/td>\n<\/tr>\n
s.connect_ex()<\/td>\nconnect()\u51fd\u6570\u7684\u6269\u5c55\u7248\u672c,\u51fa\u9519\u65f6\u8fd4\u56de\u51fa\u9519\u7801,\u800c\u4e0d\u662f\u629b\u51fa\u5f02\u5e38<\/td>\n<\/tr>\n
\u516c\u5171\u7528\u9014\u7684\u5957\u63a5\u5b57\u51fd\u6570<\/td>\n<\/tr>\n
s.recv()<\/td>\n\u63a5\u6536TCP\u6570\u636e\uff0c\u6570\u636e\u4ee5\u5b57\u7b26\u4e32\u5f62\u5f0f\u8fd4\u56de\uff0cbufsize\u6307\u5b9a\u8981\u63a5\u6536\u7684\u6700\u5927\u6570\u636e\u91cf\u3002flag\u63d0\u4f9b\u6709\u5173\u6d88\u606f\u7684\u5176\u4ed6\u4fe1\u606f\uff0c\u901a\u5e38\u53ef\u4ee5\u5ffd\u7565\u3002<\/td>\n<\/tr>\n
s.send()<\/td>\n\u53d1\u9001TCP\u6570\u636e\uff0c\u5c06string\u4e2d\u7684\u6570\u636e\u53d1\u9001\u5230\u8fde\u63a5\u7684\u5957\u63a5\u5b57\u3002\u8fd4\u56de\u503c\u662f\u8981\u53d1\u9001\u7684\u5b57\u8282\u6570\u91cf\uff0c\u8be5\u6570\u91cf\u53ef\u80fd\u5c0f\u4e8estring\u7684\u5b57\u8282\u5927\u5c0f\u3002<\/td>\n<\/tr>\n
s.sendall()<\/td>\n\u5b8c\u6574\u53d1\u9001TCP\u6570\u636e\uff0c\u5b8c\u6574\u53d1\u9001TCP\u6570\u636e\u3002\u5c06string\u4e2d\u7684\u6570\u636e\u53d1\u9001\u5230\u8fde\u63a5\u7684\u5957\u63a5\u5b57\uff0c\u4f46\u5728\u8fd4\u56de\u4e4b\u524d\u4f1a\u5c1d\u8bd5\u53d1\u9001\u6240\u6709\u6570\u636e\u3002\u6210\u529f\u8fd4\u56deNone\uff0c\u5931\u8d25\u5219\u629b\u51fa\u5f02\u5e38\u3002<\/td>\n<\/tr>\n
s.recvfrom()<\/td>\n\u63a5\u6536UDP\u6570\u636e\uff0c\u4e0erecv()\u7c7b\u4f3c\uff0c\u4f46\u8fd4\u56de\u503c\u662f\uff08data,address\uff09\u3002\u5176\u4e2ddata\u662f\u5305\u542b\u63a5\u6536\u6570\u636e\u7684\u5b57\u7b26\u4e32\uff0caddress\u662f\u53d1\u9001\u6570\u636e\u7684\u5957\u63a5\u5b57\u5730\u5740\u3002<\/td>\n<\/tr>\n
s.sendto()<\/td>\n\u53d1\u9001UDP\u6570\u636e\uff0c\u5c06\u6570\u636e\u53d1\u9001\u5230\u5957\u63a5\u5b57\uff0caddress\u662f\u5f62\u5f0f\u4e3a\uff08ipaddr\uff0cport\uff09\u7684\u5143\u7ec4\uff0c\u6307\u5b9a\u8fdc\u7a0b\u5730\u5740\u3002\u8fd4\u56de\u503c\u662f\u53d1\u9001\u7684\u5b57\u8282\u6570\u3002<\/td>\n<\/tr>\n
s.close()<\/td>\n\u5173\u95ed\u5957\u63a5\u5b57<\/td>\n<\/tr>\n
s.getpeername()<\/td>\n\u8fd4\u56de\u8fde\u63a5\u5957\u63a5\u5b57\u7684\u8fdc\u7a0b\u5730\u5740\u3002\u8fd4\u56de\u503c\u901a\u5e38\u662f\u5143\u7ec4\uff08ipaddr,port\uff09\u3002<\/td>\n<\/tr>\n
s.getsockname()<\/td>\n\u8fd4\u56de\u5957\u63a5\u5b57\u81ea\u5df1\u7684\u5730\u5740\u3002\u901a\u5e38\u662f\u4e00\u4e2a\u5143\u7ec4(ipaddr,port)<\/td>\n<\/tr>\n
s.setsockopt(level,optname,value)<\/td>\n\u8bbe\u7f6e\u7ed9\u5b9a\u5957\u63a5\u5b57\u9009\u9879\u7684\u503c\u3002<\/td>\n<\/tr>\n
s.getsockopt(level,optname[.buflen])<\/td>\n\u8fd4\u56de\u5957\u63a5\u5b57\u9009\u9879\u7684\u503c\u3002<\/td>\n<\/tr>\n
s.settimeout(timeout)<\/td>\n\u8bbe\u7f6e\u5957\u63a5\u5b57\u64cd\u4f5c\u7684\u8d85\u65f6\u671f\uff0ctimeout\u662f\u4e00\u4e2a\u6d6e\u70b9\u6570\uff0c\u5355\u4f4d\u662f\u79d2\u3002\u503c\u4e3aNone\u8868\u793a\u6ca1\u6709\u8d85\u65f6\u671f\u3002\u4e00\u822c\uff0c\u8d85\u65f6\u671f\u5e94\u8be5\u5728\u521a\u521b\u5efa\u5957\u63a5\u5b57\u65f6\u8bbe\u7f6e\uff0c\u56e0\u4e3a\u5b83\u4eec\u53ef\u80fd\u7528\u4e8e\u8fde\u63a5\u7684\u64cd\u4f5c\uff08\u5982connect()\uff09<\/td>\n<\/tr>\n
s.gettimeout()<\/td>\n\u8fd4\u56de\u5f53\u524d\u8d85\u65f6\u671f\u7684\u503c\uff0c\u5355\u4f4d\u662f\u79d2\uff0c\u5982\u679c\u6ca1\u6709\u8bbe\u7f6e\u8d85\u65f6\u671f\uff0c\u5219\u8fd4\u56deNone\u3002<\/td>\n<\/tr>\n
s.fileno()<\/td>\n\u8fd4\u56de\u5957\u63a5\u5b57\u7684\u6587\u4ef6\u63cf\u8ff0\u7b26\u3002<\/td>\n<\/tr>\n
s.setblocking(flag)<\/td>\n\u5982\u679cflag\u4e3a0\uff0c\u5219\u5c06\u5957\u63a5\u5b57\u8bbe\u4e3a\u975e\u963b\u585e\u6a21\u5f0f\uff0c\u5426\u5219\u5c06\u5957\u63a5\u5b57\u8bbe\u4e3a\u963b\u585e\u6a21\u5f0f\uff08\u9ed8\u8ba4\u503c\uff09\u3002\u975e\u963b\u585e\u6a21\u5f0f\u4e0b\uff0c\u5982\u679c\u8c03\u7528recv()\u6ca1\u6709\u53d1\u73b0\u4efb\u4f55\u6570\u636e\uff0c\u6216send()\u8c03\u7528\u65e0\u6cd5\u7acb\u5373\u53d1\u9001\u6570\u636e\uff0c\u90a3\u4e48\u5c06\u5f15\u8d77socket.error\u5f02\u5e38\u3002<\/td>\n<\/tr>\n
s.makefile()<\/td>\n\u521b\u5efa\u4e00\u4e2a\u4e0e\u8be5\u5957\u63a5\u5b57\u76f8\u5173\u8fde\u7684\u6587\u4ef6<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n
\u7b80\u5355\u5b9e\u4f8b<\/strong><\/div>\n
\u670d\u52a1\u7aef<\/strong><\/span><\/div>\n

\u6211\u4eec\u4f7f\u7528 socket \u6a21\u5757\u7684 socket \u51fd\u6570\u6765\u521b\u5efa\u4e00\u4e2a socket \u5bf9\u8c61\u3002socket \u5bf9\u8c61\u53ef\u4ee5\u901a\u8fc7\u8c03\u7528\u5176\u4ed6\u51fd\u6570\u6765\u8bbe\u7f6e\u4e00\u4e2a socket \u670d\u52a1\u3002<\/p>\n

\u73b0\u5728\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8c03\u7528 bind(hostname, port) \u51fd\u6570\u6765\u6307\u5b9a\u670d\u52a1\u7684 port(\u7aef\u53e3)\u3002<\/p>\n

\u63a5\u7740\uff0c\u6211\u4eec\u8c03\u7528 socket \u5bf9\u8c61\u7684 accept \u65b9\u6cd5\u3002\u8be5\u65b9\u6cd5\u7b49\u5f85\u5ba2\u6237\u7aef\u7684\u8fde\u63a5\uff0c\u5e76\u8fd4\u56de connection \u5bf9\u8c61\uff0c\u8868\u793a\u5df2\u8fde\u63a5\u5230\u5ba2\u6237\u7aef\u3002<\/p>\n

\u5b8c\u6574\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n

#!\/usr\/bin\/python3\r\n# \u6587\u4ef6\u540d\uff1aserver.py\r\n\r\n# \u5bfc\u5165 socket\u3001sys \u6a21\u5757\r\nimport socket\r\nimport sys\r\n\r\n# \u521b\u5efa socket \u5bf9\u8c61\r\nserversocket = socket.socket(\r\n            socket.AF_INET, socket.SOCK_STREAM) \r\n\r\n# \u83b7\u53d6\u672c\u5730\u4e3b\u673a\u540d\r\nhost = socket.gethostname()\r\n\r\nport = 9999\r\n\r\n# \u7ed1\u5b9a\u7aef\u53e3\u53f7\r\nserversocket.bind((host, port))\r\n\r\n# \u8bbe\u7f6e\u6700\u5927\u8fde\u63a5\u6570\uff0c\u8d85\u8fc7\u540e\u6392\u961f\r\nserversocket.listen(5)\r\n\r\nwhile True:\r\n    # \u5efa\u7acb\u5ba2\u6237\u7aef\u8fde\u63a5\r\n    clientsocket,addr = serversocket.accept()      \r\n\r\n    print(\"\u8fde\u63a5\u5730\u5740: %s\" % str(addr))\r\n    \r\n    msg='\u6b22\u8fce\u8bbf\u95ee\u83dc\u9e1f\u6559\u7a0b\uff01'+ \"\\r\\n\"\r\n    clientsocket.send(msg.encode('utf-8'))\r\n    clientsocket.close()<\/pre>\n
\u5ba2\u6237\u7aef<\/strong><\/span><\/div>\n

\u63a5\u4e0b\u6765\u6211\u4eec\u5199\u4e00\u4e2a\u7b80\u5355\u7684\u5ba2\u6237\u7aef\u5b9e\u4f8b\u8fde\u63a5\u5230\u4ee5\u4e0a\u521b\u5efa\u7684\u670d\u52a1\u3002\u7aef\u53e3\u53f7\u4e3a 9999\u3002<\/p>\n

socket.connect(hosname, port ) \u65b9\u6cd5\u6253\u5f00\u4e00\u4e2a TCP \u8fde\u63a5\u5230\u4e3b\u673a\u4e3a hostname \u7aef\u53e3\u4e3a port \u7684\u670d\u52a1\u5546\u3002\u8fde\u63a5\u540e\u6211\u4eec\u5c31\u53ef\u4ee5\u4ece\u670d\u52a1\u7aef\u83b7\u53d6\u6570\u636e\uff0c\u8bb0\u4f4f\uff0c\u64cd\u4f5c\u5b8c\u6210\u540e\u9700\u8981\u5173\u95ed\u8fde\u63a5\u3002<\/p>\n

\u5b8c\u6574\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n

#!\/usr\/bin\/python3\r\n# \u6587\u4ef6\u540d\uff1aclient.py\r\n\r\n# \u5bfc\u5165 socket\u3001sys \u6a21\u5757\r\nimport socket\r\nimport sys\r\n\r\n# \u521b\u5efa socket \u5bf9\u8c61\r\ns = socket.socket(socket.AF_INET, socket.SOCK_STREAM) \r\n\r\n# \u83b7\u53d6\u672c\u5730\u4e3b\u673a\u540d\r\nhost = socket.gethostname() \r\n\r\n# \u8bbe\u7f6e\u7aef\u53e3\u53f7\r\nport = 9999\r\n\r\n# \u8fde\u63a5\u670d\u52a1\uff0c\u6307\u5b9a\u4e3b\u673a\u548c\u7aef\u53e3\r\ns.connect((host, port))\r\n\r\n# \u63a5\u6536\u5c0f\u4e8e 1024 \u5b57\u8282\u7684\u6570\u636e\r\nmsg = s.recv(1024)\r\n\r\ns.close()\r\n\r\nprint (msg.decode('utf-8'))<\/pre>\n

\u73b0\u5728\u6211\u4eec\u6253\u5f00\u4e24\u4e2a\u7ec8\u7aef\uff0c\u7b2c\u4e00\u4e2a\u7ec8\u7aef\u6267\u884c server.py \u6587\u4ef6\uff1a<\/p>\n

$ python3 server.py<\/pre>\n

\u7b2c\u4e8c\u4e2a\u7ec8\u7aef\u6267\u884c client.py \u6587\u4ef6\uff1a<\/p>\n

$ python3 client.py <\/pre>\n

\u6b22\u8fce\u8bbf\u95ee\u83dc\u9e1f\u6559\u7a0b\uff01
\n\u8fd9\u65f6\u6211\u4eec\u518d\u6253\u5f00\u7b2c\u4e00\u4e2a\u7ec8\u7aef\uff0c\u5c31\u4f1a\u770b\u5230\u6709\u4ee5\u4e0b\u4fe1\u606f\u8f93\u51fa\uff1a<\/p>\n

\u8fde\u63a5\u5730\u5740\uff1a ('192.168.0.118', 33397)<\/pre>\n
Python Internet \u6a21\u5757<\/strong><\/div>\n

\u4ee5\u4e0b\u5217\u51fa\u4e86 Python \u7f51\u7edc\u7f16\u7a0b\u7684\u4e00\u4e9b\u91cd\u8981\u6a21\u5757\uff1a<\/p>\n\n\n\n\n\n\n\n\n\n\n\n
\u534f\u8bae<\/th>\n\u529f\u80fd\u7528\u5904<\/th>\n\u7aef\u53e3\u53f7<\/th>\nPython \u6a21\u5757<\/th>\n<\/tr>\n
HTTP<\/td>\n\u7f51\u9875\u8bbf\u95ee<\/td>\n80<\/td>\nhttplib, urllib, xmlrpclib<\/td>\n<\/tr>\n
NNTP<\/td>\n\u9605\u8bfb\u548c\u5f20\u8d34\u65b0\u95fb\u6587\u7ae0\uff0c\u4fd7\u79f0\u4e3a\"\u5e16\u5b50\"<\/td>\n119<\/td>\nnntplib<\/td>\n<\/tr>\n
FTP<\/td>\n\u6587\u4ef6\u4f20\u8f93<\/td>\n20<\/td>\nftplib, urllib<\/td>\n<\/tr>\n
SMTP<\/td>\n\u53d1\u9001\u90ae\u4ef6<\/td>\n25<\/td>\nsmtplib<\/td>\n<\/tr>\n
POP3<\/td>\n\u63a5\u6536\u90ae\u4ef6<\/td>\n110<\/td>\npoplib<\/td>\n<\/tr>\n
IMAP4<\/td>\n\u83b7\u53d6\u90ae\u4ef6<\/td>\n143<\/td>\nimaplib<\/td>\n<\/tr>\n
Telnet<\/td>\n\u547d\u4ee4\u884c<\/td>\n23<\/td>\ntelnetlib<\/td>\n<\/tr>\n
Gopher<\/td>\n\u4fe1\u606f\u67e5\u627e<\/td>\n70<\/td>\ngopherlib, urllib<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"

\u4f4e\u7ea7\u522b\u7684\u7f51\u7edc\u670d\u52a1\u652f\u6301\u57fa\u672c\u7684 Socket\uff0c\u5b83\u63d0\u4f9b\u4e86\u6807\u51c6\u7684 BSD Sockets API\uff0c\u53ef\u4ee5\u8bbf\u95ee\u5e95\u5c42\u64cd\u4f5c\u7cfb\u7edf […]<\/p>\n","protected":false},"author":1470,"featured_media":167049,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[55],"tags":[],"class_list":["post-167046","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-thread"],"acf":[],"_links":{"self":[{"href":"https:\/\/lrxjmw.cn\/wp-json\/wp\/v2\/posts\/167046","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lrxjmw.cn\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lrxjmw.cn\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lrxjmw.cn\/wp-json\/wp\/v2\/users\/1470"}],"replies":[{"embeddable":true,"href":"https:\/\/lrxjmw.cn\/wp-json\/wp\/v2\/comments?post=167046"}],"version-history":[{"count":8,"href":"https:\/\/lrxjmw.cn\/wp-json\/wp\/v2\/posts\/167046\/revisions"}],"predecessor-version":[{"id":167501,"href":"https:\/\/lrxjmw.cn\/wp-json\/wp\/v2\/posts\/167046\/revisions\/167501"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lrxjmw.cn\/wp-json\/wp\/v2\/media\/167049"}],"wp:attachment":[{"href":"https:\/\/lrxjmw.cn\/wp-json\/wp\/v2\/media?parent=167046"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lrxjmw.cn\/wp-json\/wp\/v2\/categories?post=167046"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lrxjmw.cn\/wp-json\/wp\/v2\/tags?post=167046"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}