{"id":700,"date":"2025-11-19T14:04:59","date_gmt":"2025-11-19T06:04:59","guid":{"rendered":"https:\/\/help.ipnut.com\/?post_type=docs&#038;p=700"},"modified":"2025-12-03T17:49:23","modified_gmt":"2025-12-03T09:49:23","password":"","slug":"tong-guo-c-yu-yan-jie-ru-dai-ma-demo","status":"publish","type":"docs","link":"https:\/\/www.ipnut.com\/cn\/help\/kai-fa-wen-dang\/tong-guo-c-yu-yan-jie-ru-dai-ma-demo\/","title":{"rendered":"\u901a\u8fc7C#\u8bed\u8a00\u63a5\u5165\u4ee3\u7801Demo"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"700\" class=\"elementor elementor-700\" data-elementor-post-type=\"docs\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6ba8677 e-flex e-con-boxed e-con e-parent\" data-id=\"6ba8677\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4feddc8 elementor-widget elementor-widget-text-editor\" data-id=\"4feddc8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>\u901a\u8fc7C#\u8bed\u8a00\u914d\u7f6eIPNut \u4ee3\u7406\uff1a<\/p><p>\u8fdb\u5165 <strong><a href=\"https:\/\/www.ipnut.com\/cn\/\" target=\"_blank\" rel=\"noopener nofollow\">IPNut<\/a><\/strong> \u5e73\u53f0\u8d2d\u4e70\u5e76\u83b7\u53d6\u4fe1\u606f\uff0c\u8fd9\u91cc\u4ee5\u9759\u6001IP\u4e3a\u4f8b\uff08\u5047\u5982\u7aef\u53e3\u662f http:\/\/proxy.ipnut.com:28001\uff0c\u8d26\u53f7: ipnut\uff0c\u5bc6\u7801: 123456789\uff09\u3002<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6407f4f elementor-widget elementor-widget-heading\" data-id=\"6407f4f\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">1. SOCKS5\u4ee3\u7406\u793a\u4f8b<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9df9d5a elementor-widget elementor-widget-code-highlight\" data-id=\"9df9d5a\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-csharp \">\n\t\t\t\t<code readonly=\"true\" class=\"language-csharp\">\n\t\t\t\t\t<xmp>\/**\r\n * SOCKS5\u4ee3\u7406\u6f14\u793a - C#\r\n *\/\r\n\r\nusing System;\r\nusing System.Net;\r\nusing System.Net.Sockets;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace ProxyDemo\r\n{\r\n    public class Socks5ProxyDemo\r\n    {\r\n        private readonly string proxyHost = \"proxy.ipnut.com\";\r\n        private readonly int proxyPort = 28001;\r\n        private readonly string proxyUsername = \"ipnut\";\r\n        private readonly string proxyPassword = \"123456789\";\r\n\r\n        \/**\r\n         * \u8fde\u63a5\u5230SOCKS5\u4ee3\u7406\u670d\u52a1\u5668\r\n         *\/\r\n        private async Task<Socket> ConnectToSocks5ProxyAsync()\r\n        {\r\n            try\r\n            {\r\n                var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);\r\n                \r\n                \/\/ \u89e3\u6790\u4ee3\u7406\u670d\u52a1\u5668\u5730\u5740\r\n                var hostEntry = await Dns.GetHostEntryAsync(proxyHost);\r\n                var proxyEndPoint = new IPEndPoint(hostEntry.AddressList[0], proxyPort);\r\n                \r\n                await socket.ConnectAsync(proxyEndPoint);\r\n                Console.WriteLine(\"\u6210\u529f\u8fde\u63a5\u5230SOCKS5\u4ee3\u7406\u670d\u52a1\u5668\");\r\n                \r\n                return socket;\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"\u8fde\u63a5\u5230\u4ee3\u7406\u670d\u52a1\u5668\u5931\u8d25: {ex.Message}\");\r\n                return null;\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * SOCKS5\u8ba4\u8bc1\u63e1\u624b\r\n         *\/\r\n        private async Task<bool> Socks5AuthenticateAsync(Socket socket)\r\n        {\r\n            try\r\n            {\r\n                \/\/ SOCKS5\u63e1\u624b\u5305\r\n                byte[] handshake = new byte[]\r\n                {\r\n                    0x05, \/\/ SOCKS\u7248\u672c5\r\n                    0x02, \/\/ \u8ba4\u8bc1\u65b9\u6cd5\u6570\u91cf\r\n                    0x00, \/\/ \u65e0\u8ba4\u8bc1\r\n                    0x02  \/\/ \u7528\u6237\u540d\u5bc6\u7801\u8ba4\u8bc1\r\n                };\r\n\r\n                await socket.SendAsync(new ArraySegment<byte>(handshake), SocketFlags.None);\r\n\r\n                \/\/ \u63a5\u6536\u670d\u52a1\u5668\u54cd\u5e94\r\n                byte[] response = new byte[2];\r\n                int bytesReceived = await socket.ReceiveAsync(new ArraySegment<byte>(response), SocketFlags.None);\r\n                \r\n                if (bytesReceived < 2)\r\n                {\r\n                    Console.WriteLine(\"\u63a5\u6536\u63e1\u624b\u54cd\u5e94\u5931\u8d25\");\r\n                    return false;\r\n                }\r\n\r\n                if (response[0] != 0x05)\r\n                {\r\n                    Console.WriteLine(\"\u4e0d\u652f\u6301\u7684SOCKS\u7248\u672c\");\r\n                    return false;\r\n                }\r\n\r\n                \/\/ \u5982\u679c\u9700\u8981\u7528\u6237\u540d\u5bc6\u7801\u8ba4\u8bc1\r\n                if (response[1] == 0x02)\r\n                {\r\n                    return await Socks5UsernamePasswordAuthAsync(socket);\r\n                }\r\n                else if (response[1] != 0x00)\r\n                {\r\n                    Console.WriteLine($\"\u4e0d\u652f\u6301\u7684\u8ba4\u8bc1\u65b9\u6cd5: {response[1]}\");\r\n                    return false;\r\n                }\r\n\r\n                return true;\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"SOCKS5\u8ba4\u8bc1\u5931\u8d25: {ex.Message}\");\r\n                return false;\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * SOCKS5\u7528\u6237\u540d\u5bc6\u7801\u8ba4\u8bc1\r\n         *\/\r\n        private async Task<bool> Socks5UsernamePasswordAuthAsync(Socket socket)\r\n        {\r\n            try\r\n            {\r\n                var authPacket = new System.Collections.Generic.List<byte>();\r\n                authPacket.Add(0x01); \/\/ \u8ba4\u8bc1\u7248\u672c\r\n                authPacket.Add((byte)proxyUsername.Length);\r\n                authPacket.AddRange(Encoding.UTF8.GetBytes(proxyUsername));\r\n                authPacket.Add((byte)proxyPassword.Length);\r\n                authPacket.AddRange(Encoding.UTF8.GetBytes(proxyPassword));\r\n\r\n                await socket.SendAsync(new ArraySegment<byte>(authPacket.ToArray()), SocketFlags.None);\r\n\r\n                byte[] authResponse = new byte[2];\r\n                int bytesReceived = await socket.ReceiveAsync(new ArraySegment<byte>(authResponse), SocketFlags.None);\r\n                \r\n                if (bytesReceived < 2)\r\n                {\r\n                    Console.WriteLine(\"\u63a5\u6536\u8ba4\u8bc1\u54cd\u5e94\u5931\u8d25\");\r\n                    return false;\r\n                }\r\n\r\n                if (authResponse[0] != 0x01 || authResponse[1] != 0x00)\r\n                {\r\n                    Console.WriteLine(\"SOCKS5\u8ba4\u8bc1\u5931\u8d25\");\r\n                    return false;\r\n                }\r\n\r\n                Console.WriteLine(\"SOCKS5\u8ba4\u8bc1\u6210\u529f\");\r\n                return true;\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"\u7528\u6237\u540d\u5bc6\u7801\u8ba4\u8bc1\u5931\u8d25: {ex.Message}\");\r\n                return false;\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * \u901a\u8fc7SOCKS5\u4ee3\u7406\u8fde\u63a5\u76ee\u6807\u670d\u52a1\u5668\r\n         *\/\r\n        private async Task<bool> Socks5ConnectToTargetAsync(Socket socket, string targetHost, int targetPort)\r\n        {\r\n            try\r\n            {\r\n                var connectPacket = new System.Collections.Generic.List<byte>();\r\n                connectPacket.Add(0x05); \/\/ SOCKS\u7248\u672c\r\n                connectPacket.Add(0x01); \/\/ CONNECT\u547d\u4ee4\r\n                connectPacket.Add(0x00); \/\/ \u4fdd\u7559\r\n\r\n                \/\/ \u57df\u540d\u7c7b\u578b\r\n                connectPacket.Add(0x03); \/\/ \u57df\u540d\r\n                connectPacket.Add((byte)targetHost.Length);\r\n                connectPacket.AddRange(Encoding.UTF8.GetBytes(targetHost));\r\n                \r\n                \/\/ \u7aef\u53e3\r\n                connectPacket.Add((byte)((targetPort >> 8) & 0xFF));\r\n                connectPacket.Add((byte)(targetPort & 0xFF));\r\n\r\n                await socket.SendAsync(new ArraySegment<byte>(connectPacket.ToArray()), SocketFlags.None);\r\n\r\n                \/\/ \u63a5\u6536\u8fde\u63a5\u54cd\u5e94\r\n                byte[] connectResponse = new byte[10];\r\n                int bytesReceived = await socket.ReceiveAsync(new ArraySegment<byte>(connectResponse), SocketFlags.None);\r\n                \r\n                if (bytesReceived < 2)\r\n                {\r\n                    Console.WriteLine(\"\u63a5\u6536\u8fde\u63a5\u54cd\u5e94\u5931\u8d25\");\r\n                    return false;\r\n                }\r\n\r\n                if (connectResponse[0] != 0x05 || connectResponse[1] != 0x00)\r\n                {\r\n                    Console.WriteLine($\"SOCKS5\u8fde\u63a5\u5931\u8d25\uff0c\u4ee3\u7801: {connectResponse[1]}\");\r\n                    return false;\r\n                }\r\n\r\n                Console.WriteLine(\"\u901a\u8fc7SOCKS5\u4ee3\u7406\u6210\u529f\u8fde\u63a5\u5230\u76ee\u6807\u670d\u52a1\u5668\");\r\n                return true;\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"SOCKS5\u8fde\u63a5\u76ee\u6807\u5931\u8d25: {ex.Message}\");\r\n                return false;\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * \u901a\u8fc7SOCKS5\u4ee3\u7406\u53d1\u9001HTTP\u8bf7\u6c42\r\n         *\/\r\n        public async Task SendHttpRequestViaSocks5Async(string targetHost, int targetPort, string path = \"\/ip\")\r\n        {\r\n            Console.WriteLine($\"=== \u901a\u8fc7SOCKS5\u4ee3\u7406\u53d1\u9001HTTP\u8bf7\u6c42 ===\");\r\n\r\n            var socket = await ConnectToSocks5ProxyAsync();\r\n            if (socket == null) return;\r\n\r\n            try\r\n            {\r\n                if (!await Socks5AuthenticateAsync(socket))\r\n                    return;\r\n\r\n                if (!await Socks5ConnectToTargetAsync(socket, targetHost, targetPort))\r\n                    return;\r\n\r\n                \/\/ \u53d1\u9001HTTP\u8bf7\u6c42\r\n                string httpRequest = \r\n                    $\"GET {path} HTTP\/1.1\\r\\n\" +\r\n                    $\"Host: {targetHost}\\r\\n\" +\r\n                    \"User-Agent: CSharp-SOCKS5-Proxy\/1.0\\r\\n\" +\r\n                    \"Connection: close\\r\\n\" +\r\n                    \"\\r\\n\";\r\n\r\n                byte[] requestBytes = Encoding.UTF8.GetBytes(httpRequest);\r\n                await socket.SendAsync(new ArraySegment<byte>(requestBytes), SocketFlags.None);\r\n\r\n                \/\/ \u63a5\u6536HTTP\u54cd\u5e94\r\n                Console.WriteLine(\"HTTP\u54cd\u5e94:\");\r\n                byte[] buffer = new byte[4096];\r\n                int bytesReceived;\r\n                \r\n                while ((bytesReceived = await socket.ReceiveAsync(new ArraySegment<byte>(buffer), SocketFlags.None)) > 0)\r\n                {\r\n                    string response = Encoding.UTF8.GetString(buffer, 0, bytesReceived);\r\n                    Console.Write(response);\r\n                }\r\n\r\n                Console.WriteLine();\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"\u8bf7\u6c42\u5931\u8d25: {ex.Message}\");\r\n            }\r\n            finally\r\n            {\r\n                socket?.Close();\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * \u4f7f\u7528HttpClient\u901a\u8fc7SOCKS5\u4ee3\u7406\r\n         *\/\r\n        public async Task UseHttpClientWithSocks5Async()\r\n        {\r\n            Console.WriteLine(\"=== \u4f7f\u7528HttpClient\u901a\u8fc7SOCKS5\u4ee3\u7406 ===\");\r\n\r\n            try\r\n            {\r\n                \/\/ \u521b\u5efa\u81ea\u5b9a\u4e49HttpClientHandler\u4f7f\u7528SOCKS5\u4ee3\u7406\r\n                var handler = new HttpClientHandler\r\n                {\r\n                    Proxy = new WebProxy($\"socks5:\/\/{proxyUsername}:{proxyPassword}@{proxyHost}:{proxyPort}\"),\r\n                    UseProxy = true\r\n                };\r\n\r\n                using var httpClient = new HttpClient(handler);\r\n                httpClient.Timeout = TimeSpan.FromSeconds(30);\r\n                httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(\"CSharp-SOCKS5-HttpClient\/1.0\");\r\n\r\n                var response = await httpClient.GetAsync(\"http:\/\/httpbin.org\/ip\");\r\n                response.EnsureSuccessStatusCode();\r\n\r\n                string content = await response.Content.ReadAsStringAsync();\r\n                Console.WriteLine($\"\u72b6\u6001\u7801: {response.StatusCode}\");\r\n                Console.WriteLine($\"\u54cd\u5e94\u5185\u5bb9: {content}\");\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"HttpClient\u8bf7\u6c42\u5931\u8d25: {ex.Message}\");\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * \u8fd0\u884cSOCKS5\u6f14\u793a\r\n         *\/\r\n        public async Task RunDemoAsync()\r\n        {\r\n            Console.WriteLine(\"\u5f00\u59cbSOCKS5\u4ee3\u7406\u6d4b\u8bd5...\\n\");\r\n\r\n            \/\/ \u6d4b\u8bd5Socket\u65b9\u5f0f\r\n            await SendHttpRequestViaSocks5Async(\"httpbin.org\", 80, \"\/ip\");\r\n            await SendHttpRequestViaSocks5Async(\"httpbin.org\", 80, \"\/user-agent\");\r\n            await SendHttpRequestViaSocks5Async(\"httpbin.org\", 80, \"\/headers\");\r\n\r\n            \/\/ \u6d4b\u8bd5HttpClient\u65b9\u5f0f\r\n            await UseHttpClientWithSocks5Async();\r\n\r\n            Console.WriteLine(\"SOCKS5\u4ee3\u7406\u6d4b\u8bd5\u5b8c\u6210!\");\r\n        }\r\n    }\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1ed94fd elementor-widget elementor-widget-heading\" data-id=\"1ed94fd\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">2. HTTP\u4ee3\u7406\u793a\u4f8b<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dabad42 elementor-widget elementor-widget-code-highlight\" data-id=\"dabad42\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-csharp \">\n\t\t\t\t<code readonly=\"true\" class=\"language-csharp\">\n\t\t\t\t\t<xmp>\/**\r\n * HTTP\u4ee3\u7406\u6f14\u793a - C#\r\n *\/\r\n\r\nusing System;\r\nusing System.Net;\r\nusing System.Net.Http;\r\nusing System.Net.Sockets;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace ProxyDemo\r\n{\r\n    public class HttpProxyDemo\r\n    {\r\n        private readonly string proxyHost = \"proxy.ipnut.com\";\r\n        private readonly int proxyPort = 28001;\r\n        private readonly string proxyUsername = \"ipnut\";\r\n        private readonly string proxyPassword = \"123456789\";\r\n\r\n        \/**\r\n         * \u4f7f\u7528HttpClient\u901a\u8fc7HTTP\u4ee3\u7406\r\n         *\/\r\n        public async Task UseHttpClientWithHttpProxyAsync()\r\n        {\r\n            Console.WriteLine(\"=== \u4f7f\u7528HttpClient\u901a\u8fc7HTTP\u4ee3\u7406 ===\");\r\n\r\n            try\r\n            {\r\n                \/\/ \u521b\u5efa\u4ee3\u7406\u51ed\u636e\r\n                var proxy = new WebProxy($\"http:\/\/{proxyHost}:{proxyPort}\")\r\n                {\r\n                    Credentials = new NetworkCredential(proxyUsername, proxyPassword)\r\n                };\r\n\r\n                var handler = new HttpClientHandler\r\n                {\r\n                    Proxy = proxy,\r\n                    UseProxy = true,\r\n                    PreAuthenticate = true\r\n                };\r\n\r\n                using var httpClient = new HttpClient(handler);\r\n                httpClient.Timeout = TimeSpan.FromSeconds(30);\r\n                httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(\"CSharp-HTTP-Proxy\/1.0\");\r\n\r\n                \/\/ \u6d4b\u8bd5\u591a\u4e2a\u7aef\u70b9\r\n                string[] testUrls = {\r\n                    \"http:\/\/httpbin.org\/ip\",\r\n                    \"http:\/\/httpbin.org\/user-agent\",\r\n                    \"http:\/\/httpbin.org\/headers\"\r\n                };\r\n\r\n                foreach (string url in testUrls)\r\n                {\r\n                    Console.WriteLine($\"\\n\u8bf7\u6c42: {url}\");\r\n                    \r\n                    try\r\n                    {\r\n                        var response = await httpClient.GetAsync(url);\r\n                        response.EnsureSuccessStatusCode();\r\n\r\n                        string content = await response.Content.ReadAsStringAsync();\r\n                        Console.WriteLine($\"\u72b6\u6001\u7801: {response.StatusCode}\");\r\n                        Console.WriteLine($\"\u54cd\u5e94\u5185\u5bb9: {content}\");\r\n                    }\r\n                    catch (Exception ex)\r\n                    {\r\n                        Console.WriteLine($\"\u8bf7\u6c42\u5931\u8d25: {ex.Message}\");\r\n                    }\r\n\r\n                    await Task.Delay(1000); \/\/ \u907f\u514d\u8bf7\u6c42\u8fc7\u5feb\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"HttpClient\u8bf7\u6c42\u5931\u8d25: {ex.Message}\");\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * \u4f7f\u7528WebClient\u901a\u8fc7HTTP\u4ee3\u7406\r\n         *\/\r\n        public async Task UseWebClientWithHttpProxyAsync()\r\n        {\r\n            Console.WriteLine(\"\\n=== \u4f7f\u7528WebClient\u901a\u8fc7HTTP\u4ee3\u7406 ===\");\r\n\r\n            try\r\n            {\r\n                using var webClient = new WebClient();\r\n                \r\n                \/\/ \u8bbe\u7f6e\u4ee3\u7406\r\n                webClient.Proxy = new WebProxy($\"http:\/\/{proxyHost}:{proxyPort}\")\r\n                {\r\n                    Credentials = new NetworkCredential(proxyUsername, proxyPassword)\r\n                };\r\n\r\n                webClient.Headers[\"User-Agent\"] = \"CSharp-WebClient-Proxy\/1.0\";\r\n                webClient.Headers[\"Accept\"] = \"application\/json\";\r\n\r\n                string response = await webClient.DownloadStringTaskAsync(\"http:\/\/httpbin.org\/ip\");\r\n                Console.WriteLine($\"\u54cd\u5e94\u5185\u5bb9: {response}\");\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"WebClient\u8bf7\u6c42\u5931\u8d25: {ex.Message}\");\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * \u4f7f\u7528Socket\u901a\u8fc7HTTP\u4ee3\u7406\uff08CONNECT\u65b9\u6cd5\uff09\r\n         *\/\r\n        public async Task UseSocketWithHttpProxyAsync()\r\n        {\r\n            Console.WriteLine(\"\\n=== \u4f7f\u7528Socket\u901a\u8fc7HTTP\u4ee3\u7406\uff08CONNECT\u65b9\u6cd5\uff09 ===\");\r\n\r\n            Socket socket = null;\r\n            try\r\n            {\r\n                \/\/ \u8fde\u63a5\u5230\u4ee3\u7406\u670d\u52a1\u5668\r\n                var hostEntry = await Dns.GetHostEntryAsync(proxyHost);\r\n                var proxyEndPoint = new IPEndPoint(hostEntry.AddressList[0], proxyPort);\r\n                \r\n                socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);\r\n                await socket.ConnectAsync(proxyEndPoint);\r\n                Console.WriteLine(\"\u6210\u529f\u8fde\u63a5\u5230HTTP\u4ee3\u7406\u670d\u52a1\u5668\");\r\n\r\n                \/\/ \u6784\u5efa\u8ba4\u8bc1\u4fe1\u606f\r\n                string auth = Convert.ToBase64String(Encoding.UTF8.GetBytes($\"{proxyUsername}:{proxyPassword}\"));\r\n                \r\n                \/\/ \u53d1\u9001CONNECT\u8bf7\u6c42\r\n                string connectRequest = \r\n                    $\"CONNECT httpbin.org:80 HTTP\/1.1\\r\\n\" +\r\n                    $\"Host: httpbin.org:80\\r\\n\" +\r\n                    $\"Proxy-Authorization: Basic {auth}\\r\\n\" +\r\n                    $\"User-Agent: CSharp-Socket-Proxy\/1.0\\r\\n\" +\r\n                    $\"Connection: keep-alive\\r\\n\" +\r\n                    $\"\\r\\n\";\r\n\r\n                byte[] requestBytes = Encoding.UTF8.GetBytes(connectRequest);\r\n                await socket.SendAsync(new ArraySegment<byte>(requestBytes), SocketFlags.None);\r\n\r\n                \/\/ \u8bfb\u53d6\u4ee3\u7406\u54cd\u5e94\r\n                byte[] buffer = new byte[4096];\r\n                int bytesReceived = await socket.ReceiveAsync(new ArraySegment<byte>(buffer), SocketFlags.None);\r\n                string response = Encoding.UTF8.GetString(buffer, 0, bytesReceived);\r\n                \r\n                if (!response.Contains(\"200 Connection established\"))\r\n                {\r\n                    Console.WriteLine($\"\u4ee3\u7406\u8fde\u63a5\u5931\u8d25: {response}\");\r\n                    return;\r\n                }\r\n\r\n                Console.WriteLine(\"\u901a\u8fc7HTTP\u4ee3\u7406\u6210\u529f\u8fde\u63a5\u5230\u76ee\u6807\u670d\u52a1\u5668\");\r\n\r\n                \/\/ \u53d1\u9001HTTP\u8bf7\u6c42\r\n                string httpRequest = \r\n                    \"GET \/ip HTTP\/1.1\\r\\n\" +\r\n                    \"Host: httpbin.org\\r\\n\" +\r\n                    \"User-Agent: CSharp-Socket-Proxy\/1.0\\r\\n\" +\r\n                    \"Connection: close\\r\\n\" +\r\n                    \"\\r\\n\";\r\n\r\n                byte[] httpRequestBytes = Encoding.UTF8.GetBytes(httpRequest);\r\n                await socket.SendAsync(new ArraySegment<byte>(httpRequestBytes), SocketFlags.None);\r\n\r\n                \/\/ \u8bfb\u53d6HTTP\u54cd\u5e94\r\n                Console.WriteLine(\"HTTP\u54cd\u5e94:\");\r\n                StringBuilder responseBuilder = new StringBuilder();\r\n                \r\n                while ((bytesReceived = await socket.ReceiveAsync(new ArraySegment<byte>(buffer), SocketFlags.None)) > 0)\r\n                {\r\n                    responseBuilder.Append(Encoding.UTF8.GetString(buffer, 0, bytesReceived));\r\n                }\r\n\r\n                Console.WriteLine(responseBuilder.ToString());\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"Socket\u8bf7\u6c42\u5931\u8d25: {ex.Message}\");\r\n            }\r\n            finally\r\n            {\r\n                socket?.Close();\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * HTTP\u4ee3\u7406POST\u8bf7\u6c42\u6f14\u793a\r\n         *\/\r\n        public async Task HttpProxyPostRequestAsync()\r\n        {\r\n            Console.WriteLine(\"\\n=== HTTP\u4ee3\u7406POST\u8bf7\u6c42\u6f14\u793a ===\");\r\n\r\n            try\r\n            {\r\n                var proxy = new WebProxy($\"http:\/\/{proxyHost}:{proxyPort}\")\r\n                {\r\n                    Credentials = new NetworkCredential(proxyUsername, proxyPassword)\r\n                };\r\n\r\n                var handler = new HttpClientHandler\r\n                {\r\n                    Proxy = proxy,\r\n                    UseProxy = true\r\n                };\r\n\r\n                using var httpClient = new HttpClient(handler);\r\n                httpClient.Timeout = TimeSpan.FromSeconds(30);\r\n                httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(\"CSharp-HTTP-POST-Proxy\/1.0\");\r\n\r\n                var postData = new\r\n                {\r\n                    name = \"ipnut_user\",\r\n                    email = \"user@ipnut.com\",\r\n                    message = \"\u6d4b\u8bd5HTTP\u4ee3\u7406POST\u8bf7\u6c42\"\r\n                };\r\n\r\n                string json = System.Text.Json.JsonSerializer.Serialize(postData);\r\n                var content = new StringContent(json, Encoding.UTF8, \"application\/json\");\r\n\r\n                var response = await httpClient.PostAsync(\"https:\/\/httpbin.org\/post\", content);\r\n                response.EnsureSuccessStatusCode();\r\n\r\n                string responseContent = await response.Content.ReadAsStringAsync();\r\n                Console.WriteLine($\"\u72b6\u6001\u7801: {response.StatusCode}\");\r\n                Console.WriteLine($\"\u54cd\u5e94\u5185\u5bb9: {responseContent}\");\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"POST\u8bf7\u6c42\u5931\u8d25: {ex.Message}\");\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * \u8fd0\u884cHTTP\u4ee3\u7406\u6f14\u793a\r\n         *\/\r\n        public async Task RunDemoAsync()\r\n        {\r\n            Console.WriteLine(\"\u5f00\u59cbHTTP\u4ee3\u7406\u6d4b\u8bd5...\\n\");\r\n\r\n            await UseHttpClientWithHttpProxyAsync();\r\n            await UseWebClientWithHttpProxyAsync();\r\n            await UseSocketWithHttpProxyAsync();\r\n            await HttpProxyPostRequestAsync();\r\n\r\n            Console.WriteLine(\"HTTP\u4ee3\u7406\u6d4b\u8bd5\u5b8c\u6210!\");\r\n        }\r\n    }\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d472cdd elementor-widget elementor-widget-heading\" data-id=\"d472cdd\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">3. \u4ee3\u7406\u6d4b\u8bd5\u5de5\u5177\uff1aProxyTestTool.cs<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-65a9e71 elementor-widget elementor-widget-code-highlight\" data-id=\"65a9e71\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-csharp \">\n\t\t\t\t<code readonly=\"true\" class=\"language-csharp\">\n\t\t\t\t\t<xmp>\/**\r\n * \u4ee3\u7406\u6d4b\u8bd5\u5de5\u5177 - C#\r\n *\/\r\n\r\nusing System;\r\nusing System.Net;\r\nusing System.Net.Http;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace ProxyDemo\r\n{\r\n    public class ProxyTestTool\r\n    {\r\n        private readonly string proxyHost = \"proxy.ipnut.com\";\r\n        private readonly int proxyPort = 28001;\r\n        private readonly string proxyUsername = \"ipnut\";\r\n        private readonly string proxyPassword = \"123456789\";\r\n\r\n        \/**\r\n         * \u6d4b\u8bd5SOCKS5\u4ee3\u7406\r\n         *\/\r\n        public async Task TestSocks5ProxyAsync()\r\n        {\r\n            Console.WriteLine(\"\u6d4b\u8bd5 SOCKS5 \u4ee3\u7406:\");\r\n\r\n            try\r\n            {\r\n                var handler = new HttpClientHandler\r\n                {\r\n                    Proxy = new WebProxy($\"socks5:\/\/{proxyUsername}:{proxyPassword}@{proxyHost}:{proxyPort}\"),\r\n                    UseProxy = true\r\n                };\r\n\r\n                using var httpClient = new HttpClient(handler);\r\n                httpClient.Timeout = TimeSpan.FromSeconds(15);\r\n\r\n                var response = await httpClient.GetAsync(\"http:\/\/httpbin.org\/ip\");\r\n                response.EnsureSuccessStatusCode();\r\n\r\n                string content = await response.Content.ReadAsStringAsync();\r\n                Console.WriteLine(\"\u2705 SOCKS5 \u4ee3\u7406\u8fde\u63a5\u6210\u529f\");\r\n                Console.WriteLine($\"   \u72b6\u6001\u7801: {response.StatusCode}\");\r\n                Console.WriteLine($\"   \u5f53\u524dIP: {content}\");\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"\u274c SOCKS5 \u4ee3\u7406\u8fde\u63a5\u5931\u8d25: {ex.Message}\");\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * \u6d4b\u8bd5HTTP\u4ee3\u7406\r\n         *\/\r\n        public async Task TestHttpProxyAsync()\r\n        {\r\n            Console.WriteLine(\"\\n\u6d4b\u8bd5 HTTP \u4ee3\u7406:\");\r\n\r\n            try\r\n            {\r\n                var proxy = new WebProxy($\"http:\/\/{proxyHost}:{proxyPort}\")\r\n                {\r\n                    Credentials = new NetworkCredential(proxyUsername, proxyPassword)\r\n                };\r\n\r\n                var handler = new HttpClientHandler\r\n                {\r\n                    Proxy = proxy,\r\n                    UseProxy = true\r\n                };\r\n\r\n                using var httpClient = new HttpClient(handler);\r\n                httpClient.Timeout = TimeSpan.FromSeconds(15);\r\n\r\n                var response = await httpClient.GetAsync(\"http:\/\/httpbin.org\/ip\");\r\n                response.EnsureSuccessStatusCode();\r\n\r\n                string content = await response.Content.ReadAsStringAsync();\r\n                Console.WriteLine(\"\u2705 HTTP \u4ee3\u7406\u8fde\u63a5\u6210\u529f\");\r\n                Console.WriteLine($\"   \u72b6\u6001\u7801: {response.StatusCode}\");\r\n                Console.WriteLine($\"   \u5f53\u524dIP: {content}\");\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"\u274c HTTP \u4ee3\u7406\u8fde\u63a5\u5931\u8d25: {ex.Message}\");\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * \u8fd0\u884c\u6d4b\u8bd5\r\n         *\/\r\n        public async Task RunTestsAsync()\r\n        {\r\n            Console.WriteLine(\"=== \u4ee3\u7406\u6d4b\u8bd5\u5de5\u5177 ===\\n\");\r\n\r\n            await TestSocks5ProxyAsync();\r\n            await TestHttpProxyAsync();\r\n\r\n            Console.WriteLine(\"\\n\u4ee3\u7406\u6d4b\u8bd5\u5b8c\u6210!\");\r\n        }\r\n    }\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8f2dc16 elementor-widget elementor-widget-heading\" data-id=\"8f2dc16\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">4. \u4e3b\u7a0b\u5e8f\u6587\u4ef6\uff1aProgram.cs<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-25c2b30 elementor-widget elementor-widget-code-highlight\" data-id=\"25c2b30\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-csharp \">\n\t\t\t\t<code readonly=\"true\" class=\"language-csharp\">\n\t\t\t\t\t<xmp>\/**\r\n * \u4e3b\u7a0b\u5e8f - \u4ee3\u7406\u6f14\u793a\u603b\u5165\u53e3\r\n *\/\r\n\r\nusing System;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace ProxyDemo\r\n{\r\n    class Program\r\n    {\r\n        static async Task Main(string[] args)\r\n        {\r\n            Console.WriteLine(\"C#\u4ee3\u7406\u8fde\u63a5\u6f14\u793a\u7a0b\u5e8f\");\r\n            Console.WriteLine(\"==================\\n\");\r\n\r\n            \/\/ \u8fd0\u884c\u4ee3\u7406\u6d4b\u8bd5\u5de5\u5177\r\n            var testTool = new ProxyTestTool();\r\n            await testTool.RunTestsAsync();\r\n\r\n            Console.WriteLine(\"\\n\" + new string('=', 50) + \"\\n\");\r\n\r\n            \/\/ \u8fd0\u884cSOCKS5\u6f14\u793a\r\n            var socks5Demo = new Socks5ProxyDemo();\r\n            await socks5Demo.RunDemoAsync();\r\n\r\n            Console.WriteLine(\"\\n\" + new string('=', 50) + \"\\n\");\r\n\r\n            \/\/ \u8fd0\u884cHTTP\u6f14\u793a\r\n            var httpDemo = new HttpProxyDemo();\r\n            await httpDemo.RunDemoAsync();\r\n\r\n            Console.WriteLine(\"\\n\u6240\u6709\u6f14\u793a\u5b8c\u6210!\");\r\n            Console.WriteLine(\"\u6309\u4efb\u610f\u952e\u9000\u51fa...\");\r\n            Console.ReadKey();\r\n        }\r\n    }\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5c99704 elementor-widget elementor-widget-heading\" data-id=\"5c99704\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">5. \u9879\u76ee\u914d\u7f6e\u6587\u4ef6\uff1aProxyDemo.csproj<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-085c506 elementor-widget elementor-widget-code-highlight\" data-id=\"085c506\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-csharp \">\n\t\t\t\t<code readonly=\"true\" class=\"language-csharp\">\n\t\t\t\t\t<xmp><Project Sdk=\"Microsoft.NET.Sdk\">\r\n\r\n  <PropertyGroup>\r\n    <OutputType>Exe<\/OutputType>\r\n    <TargetFramework>net6.0<\/TargetFramework>\r\n    <ImplicitUsings>enable<\/ImplicitUsings>\r\n    <Nullable>enable<\/Nullable>\r\n  <\/PropertyGroup>\r\n\r\n<\/Project><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b73809 elementor-widget elementor-widget-heading\" data-id=\"4b73809\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">6. \u7f16\u8bd1\u548c\u8fd0\u884c\u8bf4\u660e<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d438eba elementor-widget elementor-widget-code-highlight\" data-id=\"d438eba\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-csharp \">\n\t\t\t\t<code readonly=\"true\" class=\"language-csharp\">\n\t\t\t\t\t<xmp># 1.\u521b\u5efa\u65b0\u9879\u76ee\r\ndotnet new console -n ProxyDemo\r\ncd ProxyDemo\r\n\r\n# 2.\u5c06\u4e0a\u9762\u7684\u4ee3\u7801\u6587\u4ef6\u6dfb\u52a0\u5230\u9879\u76ee\u4e2d\uff0c\u5e76\u7f16\u8bd1\u548c\u8fd0\u884c\uff1a\r\n# bash\r\n# \u7f16\u8bd1\u9879\u76ee\r\ndotnet build\r\n\r\n# 2.\u8fd0\u884c\u7a0b\u5e8f\r\ndotnet run\r\n\r\n# 3.\u53d1\u5e03\u7248\u672c\r\ndotnet publish -c Release\r\n\r\n# 4.\u8fd0\u884c\u5b8c\u6574\u6f14\u793a\uff1a\r\n\r\n# bash\r\ndotnet run\r\n\r\n# 5.\u5355\u72ec\u8fd0\u884cSOCKS5\u6f14\u793a\uff1a\r\n# csharp\r\n\/\/ \u5728Program.cs\u4e2d\u6ce8\u91ca\u6389\u5176\u4ed6\u90e8\u5206\uff0c\u53ea\u4fdd\u7559\uff1a\r\nvar socks5Demo = new Socks5ProxyDemo();\r\nawait socks5Demo.RunDemoAsync();\r\n\r\n# 6.\u5355\u72ec\u8fd0\u884cHTTP\u6f14\u793a\uff1a\r\n# csharp\r\n\/\/ \u5728Program.cs\u4e2d\u6ce8\u91ca\u6389\u5176\u4ed6\u90e8\u5206\uff0c\u53ea\u4fdd\u7559\uff1a\r\nvar httpDemo = new HttpProxyDemo();\r\nawait httpDemo.RunDemoAsync();<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u901a\u8fc7C#\u8bed\u8a00\u914d\u7f6eIPNut \u4ee3\u7406\uff1a \u8fdb\u5165 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"doc_category":[43],"doc_tag":[112,61,114,77,88],"class_list":["post-700","docs","type-docs","status-publish","hentry","doc_category-kai-fa-wen-dang","doc_tag-ipv4","doc_tag-ip","doc_tag-isp","doc_tag-static-residential-cn","doc_tag-88"],"year_month":"2026-05","word_count":1487,"total_views":0,"reactions":{"happy":0,"normal":0,"sad":0},"author_info":{"name":"admin","author_nicename":"admin","author_url":"https:\/\/help.ipnut.com\/author\/admin\/"},"doc_category_info":[{"term_name":"\u5f00\u53d1\u6587\u6863","term_url":"https:\/\/help.ipnut.com\/cn\/docs\/kai-fa-wen-dang\/"}],"doc_tag_info":[{"term_name":"IPv4","term_url":"https:\/\/help.ipnut.com\/cn\/docs-tag\/ipv4\/"},{"term_name":"IP\u4ee3\u7406","term_url":"https:\/\/help.ipnut.com\/cn\/docs-tag\/ip%e4%bb%a3%e7%90%86\/"},{"term_name":"ISP","term_url":"https:\/\/help.ipnut.com\/cn\/docs-tag\/isp\/"},{"term_name":"\u9759\u6001\u4f4f\u5b85","term_url":"https:\/\/help.ipnut.com\/cn\/docs-tag\/static-residential-cn\/"},{"term_name":"\u9759\u6001\u6570\u636e\u4e2d\u5fc3","term_url":"https:\/\/help.ipnut.com\/cn\/docs-tag\/%e9%9d%99%e6%80%81%e6%95%b0%e6%8d%ae%e4%b8%ad%e5%bf%83\/"}],"lang":"cn","translations":{"cn":700,"en":843},"knowledge_base_info":[],"knowledge_base_slug":[],"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/docs\/700","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/types\/docs"}],"author":[{"embeddable":true,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/comments?post=700"}],"version-history":[{"count":8,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/docs\/700\/revisions"}],"predecessor-version":[{"id":1157,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/docs\/700\/revisions\/1157"}],"wp:attachment":[{"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/media?parent=700"}],"wp:term":[{"taxonomy":"doc_category","embeddable":true,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/doc_category?post=700"},{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/doc_tag?post=700"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}