{"id":108874,"date":"2025-05-13T23:50:14","date_gmt":"2025-05-13T20:20:14","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/inside-aws-s3-api-calls-creating-a-go-based-https-traffic-inspector-1gn6\/"},"modified":"2025-05-13T23:50:14","modified_gmt":"2025-05-13T20:20:14","slug":"inside-aws-s3-api-calls-creating-a-go-based-https-traffic-inspector-1gn6","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/inside-aws-s3-api-calls-creating-a-go-based-https-traffic-inspector-1gn6\/","title":{"rendered":"Inside AWS S3 API Calls: \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0628\u0627\u0632\u0631\u0633 \u062a\u0631\u0627\u0641\u06cc\u06a9 HTTPS \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 GO &#8211; Community Dev"},"content":{"rendered":"<div data-article-id=\"2485471\" id=\"article-body\" wp_automatic_readability=\"291.2841031676\">\n<p>\u0622\u06cc\u0627 \u062a\u0627 \u0628\u0647 \u062d\u0627\u0644 \u0641\u06a9\u0631 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u06a9\u0647 HTTP \u062f\u0631 \u0648\u0627\u0642\u0639 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u062e\u0637 \u0641\u0631\u0645\u0627\u0646 \u0634\u0645\u0627 \u0686\u0647 \u0686\u06cc\u0632\u06cc \u0631\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc \u06a9\u0646\u062f\u061f \u0648\u0642\u062a\u06cc \u062f\u0648\u06cc\u062f\u06cc\u062f <code>aws s3 ls<\/code> \u06cc\u0627 <code>curl https:\/\/api.example.com<\/code>\u060c \u0648\u0627\u0642\u0639\u0627\u064b \u0632\u06cc\u0631 \u06a9\u0627\u067e\u0648\u062a \u0686\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0645\u06cc \u0627\u0641\u062a\u062f\u061f \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u060c \u0627\u0628\u0632\u0627\u0631\u06cc \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f \u06a9\u0647 \u062a\u0645\u0627\u0645 \u062a\u0631\u0627\u0641\u06cc\u06a9 HTTP \u0648 HTTPS \u0631\u0627 \u0628\u0627 \u0627\u06cc\u062c\u0627\u062f \u067e\u0631\u0648\u06a9\u0633\u06cc \u0631\u0647\u06af\u06cc\u0631\u06cc \u062e\u0648\u062f \u062f\u0631 GO \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>\u0645\u0627 \u0642\u0635\u062f \u062f\u0627\u0631\u06cc\u0645 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u062e\u0637 \u0641\u0631\u0645\u0627\u0646 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u06a9\u0647:<\/p>\n<ul>\n<li>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc HTTP \u0648 HTTPS \u0631\u0627 \u0627\u0632 \u0647\u0631 \u062f\u0633\u062a\u0648\u0631 \u0631\u0647\u06af\u06cc\u0631\u06cc \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<li>\u062a\u0631\u0627\u0641\u06cc\u06a9 https \u0631\u0627 \u0628\u0631\u0627\u06cc \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0646 \u0645\u062d\u062a\u0648\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u0631\u0645\u0632\u06af\u0634\u0627\u06cc\u06cc \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<li>\u062c\u0632\u0626\u06cc\u0627\u062a \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0648 \u067e\u0627\u0633\u062e \u0641\u0631\u0645\u062a \u0634\u062f\u0647 \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f<\/li>\n<li>\u0634\u0641\u0627\u0641 \u0628\u0627 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f Curl \u060c AWS CLI \u0648 \u062f\u06cc\u06af\u0631\u0627\u0646 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<\/ul>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0647\u0627\u06cc\u06cc \u0633\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"7\">\n<pre class=\"highlight shell\"><code>.\/httpmon curl https:\/\/api.github.com\n.\/httpmon aws s3 <span class=\"nb\">ls <\/span>my-bucket\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/inside-aws-s3-api-calls-creating-a-go-based-https-traffic-inspector-1gn6\/#%D8%AF%D8%B1%DA%A9_%D9%BE%D8%B1%D9%88%DA%A9%D8%B3%DB%8C_HTTP\" >\u062f\u0631\u06a9 \u067e\u0631\u0648\u06a9\u0633\u06cc HTTP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/inside-aws-s3-api-calls-creating-a-go-based-https-traffic-inspector-1gn6\/#%D8%A7%D8%B1%D8%B3%D8%A7%D9%84_%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA_HTTP\" >\u0627\u0631\u0633\u0627\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a HTTP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/inside-aws-s3-api-calls-creating-a-go-based-https-traffic-inspector-1gn6\/#%D8%B1%D8%B3%DB%8C%D8%AF%DA%AF%DB%8C_%D8%A8%D9%87_%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA_%D9%87%D8%A7%DB%8C_HTTPS\" >\u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc HTTPS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/inside-aws-s3-api-calls-creating-a-go-based-https-traffic-inspector-1gn6\/#%D8%AA%D9%86%D8%B8%DB%8C%D9%85_MITM_%D8%A8%D8%B1%D8%A7%DB%8C_https\" >\u062a\u0646\u0638\u06cc\u0645 MITM \u0628\u0631\u0627\u06cc https<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/inside-aws-s3-api-calls-creating-a-go-based-https-traffic-inspector-1gn6\/#%D8%B1%D9%87%DA%AF%DB%8C%D8%B1%DB%8C_%D9%88_%D8%B1%D9%85%D8%B2%DA%AF%D8%B4%D8%A7%DB%8C%DB%8C_%D8%AA%D8%B1%D8%A7%D9%81%DB%8C%DA%A9_HTTPS\" >\u0631\u0647\u06af\u06cc\u0631\u06cc \u0648 \u0631\u0645\u0632\u06af\u0634\u0627\u06cc\u06cc \u062a\u0631\u0627\u0641\u06cc\u06a9 HTTPS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/inside-aws-s3-api-calls-creating-a-go-based-https-traffic-inspector-1gn6\/#%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D8%B1%D8%AF%D9%86_%D9%BE%D8%B4%D8%AA%DB%8C%D8%A8%D8%A7%D9%86%DB%8C_CURL_%D9%88_AWS_CLI\" >\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc CURL \u0648 AWS CLI<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/inside-aws-s3-api-calls-creating-a-go-based-https-traffic-inspector-1gn6\/#%D8%AF%D8%B1%DA%A9_%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA_%D9%87%D8%A7%DB%8C_AWS_S3\" >\u062f\u0631\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc AWS S3<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/inside-aws-s3-api-calls-creating-a-go-based-https-traffic-inspector-1gn6\/#%DA%A9%D9%85%DB%8C_%D8%A8%DB%8C%D8%B4%D8%AA%D8%B1\" >\u06a9\u0645\u06cc \u0628\u06cc\u0634\u062a\u0631<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AF%D8%B1%DA%A9_%D9%BE%D8%B1%D9%88%DA%A9%D8%B3%DB%8C_HTTP\"><\/span>\n<p>  \u062f\u0631\u06a9 \u067e\u0631\u0648\u06a9\u0633\u06cc HTTP<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0642\u0628\u0644 \u0627\u0632 \u0634\u0631\u0648\u0639 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u062f\u0631\u06a9 \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u067e\u0631\u0648\u06a9\u0633\u06cc \u0647\u0627\u06cc HTTP \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u0646\u062f. \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0645\u0634\u062a\u0631\u06cc (\u0645\u0627\u0646\u0646\u062f CURL) \u0645\u06cc \u062e\u0648\u0627\u0647\u062f \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06cc\u06a9 \u067e\u0631\u0648\u06a9\u0633\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a HTTP \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u062f:<\/p>\n<ol>\n<li>\u0645\u0634\u062a\u0631\u06cc \u0628\u0647 \u062c\u0627\u06cc \u0633\u0631\u0648\u0631 \u0647\u062f\u0641 \u0628\u0647 \u067e\u0631\u0648\u06a9\u0633\u06cc \u0645\u062a\u0635\u0644 \u0645\u06cc \u0634\u0648\u062f<\/li>\n<li>\u0628\u0631\u0627\u06cc HTTP: \u0645\u0634\u062a\u0631\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0627\u0645\u0644 \u0631\u0627 \u0628\u0647 \u067e\u0631\u0648\u06a9\u0633\u06cc \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f \u060c \u06a9\u0647 \u0622\u0646 \u0631\u0627 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<li>\u0628\u0631\u0627\u06cc HTTPS: \u0645\u0634\u062a\u0631\u06cc \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u062a\u0648\u0646\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u062a\u0635\u0627\u0644 \u0631\u0627 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<li>\u067e\u0631\u0648\u06a9\u0633\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627 \u0648 \u067e\u0627\u0633\u062e \u0647\u0627 \u0631\u0627 \u0628\u06cc\u0646 \u0645\u0634\u062a\u0631\u06cc \u0648 \u0633\u0631\u0648\u0631 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<\/ol>\n<p>\u0686\u0627\u0644\u0634 \u0628\u0627 HTTPS \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc \u067e\u0627\u06cc\u0627\u0646 \u0628\u0647 \u067e\u0627\u06cc\u0627\u0646 \u0627\u0633\u062a. \u0628\u0631\u0627\u06cc \u062f\u06cc\u062f\u0646 \u0645\u062d\u062a\u0648\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u060c \u0645\u0627 \u0628\u0627\u06cc\u062f \u0622\u0646\u0686\u0647 \u0631\u0627 \u06a9\u0647 &#8220;\u06cc\u06a9 \u0645\u0631\u062f \u062f\u0631 \u0648\u0633\u0637&#8221; (MITM) \u0646\u0627\u0645\u06cc\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f \u060c \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645-\u0627\u0645\u0627 \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u060c \u0639\u0645\u062f\u06cc \u0648 \u0628\u0631\u0627\u06cc \u0627\u0647\u062f\u0627\u0641 \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u0627\u0633\u062a.<\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0627 \u06cc\u06a9 \u067e\u0631\u0648\u06a9\u0633\u06cc HTTP \u062d\u062f\u0627\u0642\u0644 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u062a\u0631\u0627\u0641\u06cc\u06a9 \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc \u0646\u0634\u062f\u0647 \u0631\u0627 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"23\">\n<pre class=\"highlight go\"><code><span class=\"k\">package<\/span> <span class=\"n\">main<\/span>\n\n<span class=\"k\">import<\/span> <span class=\"p\">(<\/span>\n    <span class=\"s\">\"fmt\"<\/span>\n    <span class=\"s\">\"io\"<\/span>\n    <span class=\"s\">\"net\/http\"<\/span>\n    <span class=\"s\">\"os\"<\/span>\n    <span class=\"s\">\"os\/exec\"<\/span>\n    <span class=\"s\">\"strings\"<\/span>\n    <span class=\"s\">\"time\"<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"k\">func<\/span> <span class=\"n\">proxyHandler<\/span><span class=\"p\">(<\/span><span class=\"n\">w<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">ResponseWriter<\/span><span class=\"p\">,<\/span> <span class=\"n\">r<\/span> <span class=\"o\">*<\/span><span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Request<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">=== REQUEST ===<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"%s %s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">r<\/span><span class=\"o\">.<\/span><span class=\"n\">Method<\/span><span class=\"p\">,<\/span> <span class=\"n\">r<\/span><span class=\"o\">.<\/span><span class=\"n\">URL<\/span><span class=\"o\">.<\/span><span class=\"n\">String<\/span><span class=\"p\">())<\/span>\n\n    <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Error<\/span><span class=\"p\">(<\/span><span class=\"n\">w<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"Not implemented\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">StatusNotImplemented<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">func<\/span> <span class=\"n\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Args<\/span><span class=\"p\">)<\/span> <span class=\"o\">&lt;<\/span> <span class=\"m\">2<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Usage: httpmon <command> [args...]\"<\/command><\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Exit<\/span><span class=\"p\">(<\/span><span class=\"m\">1<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">proxyPort<\/span> <span class=\"o\">:=<\/span> <span class=\"s\">\"8080\"<\/span>\n    <span class=\"k\">go<\/span> <span class=\"k\">func<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Starting proxy on :%s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">proxyPort<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">ListenAndServe<\/span><span class=\"p\">(<\/span><span class=\"s\">\":\"<\/span><span class=\"o\">+<\/span><span class=\"n\">proxyPort<\/span><span class=\"p\">,<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">HandlerFunc<\/span><span class=\"p\">(<\/span><span class=\"n\">proxyHandler<\/span><span class=\"p\">))<\/span>\n    <span class=\"p\">}()<\/span>\n\n    <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Sleep<\/span><span class=\"p\">(<\/span><span class=\"m\">100<\/span> <span class=\"o\">*<\/span> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Millisecond<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">cmdArgs<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Args<\/span><span class=\"p\">[<\/span><span class=\"m\">1<\/span><span class=\"o\">:<\/span><span class=\"p\">]<\/span>\n    <span class=\"n\">cmd<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">exec<\/span><span class=\"o\">.<\/span><span class=\"n\">Command<\/span><span class=\"p\">(<\/span><span class=\"n\">cmdArgs<\/span><span class=\"p\">[<\/span><span class=\"m\">0<\/span><span class=\"p\">],<\/span> <span class=\"n\">cmdArgs<\/span><span class=\"p\">[<\/span><span class=\"m\">1<\/span><span class=\"o\">:<\/span><span class=\"p\">]<\/span><span class=\"o\">...<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">proxyURL<\/span> <span class=\"o\">:=<\/span> <span class=\"s\">\"http:\/\/localhost:\"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">proxyPort<\/span>\n    <span class=\"n\">cmd<\/span><span class=\"o\">.<\/span><span class=\"n\">Env<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Environ<\/span><span class=\"p\">(),<\/span>\n        <span class=\"s\">\"HTTP_PROXY=\"<\/span><span class=\"o\">+<\/span><span class=\"n\">proxyURL<\/span><span class=\"p\">,<\/span>\n        <span class=\"s\">\"HTTPS_PROXY=\"<\/span><span class=\"o\">+<\/span><span class=\"n\">proxyURL<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">)<\/span>\n\n    <span class=\"n\">cmd<\/span><span class=\"o\">.<\/span><span class=\"n\">Stdout<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Stdout<\/span>\n    <span class=\"n\">cmd<\/span><span class=\"o\">.<\/span><span class=\"n\">Stderr<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Stderr<\/span>\n    <span class=\"n\">cmd<\/span><span class=\"o\">.<\/span><span class=\"n\">Stdin<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Stdin<\/span>\n\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Running: %s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">strings<\/span><span class=\"o\">.<\/span><span class=\"n\">Join<\/span><span class=\"p\">(<\/span><span class=\"n\">cmdArgs<\/span><span class=\"p\">,<\/span> <span class=\"s\">\" \"<\/span><span class=\"p\">))<\/span>\n    <span class=\"n\">cmd<\/span><span class=\"o\">.<\/span><span class=\"n\">Run<\/span><span class=\"p\">()<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u0646\u0633\u062e\u0647 \u0627\u0633\u0627\u0633\u06cc:<\/p>\n<ul>\n<li>\u06cc\u06a9 \u0633\u0631\u0648\u0631 \u067e\u0631\u0648\u06a9\u0633\u06cc \u0631\u0627 \u062f\u0631 \u067e\u0648\u0631\u062a 8080 \u0634\u0631\u0648\u0639 \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<li>\u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0647\u062f\u0627\u06cc\u062a \u062a\u0631\u0627\u0641\u06cc\u06a9 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u067e\u0631\u0648\u06a9\u0633\u06cc \u0645\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<li>\u062f\u0633\u062a\u0648\u0631 \u0645\u0634\u062e\u0635 \u0634\u062f\u0647 \u0631\u0627 \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<li>\u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u0641\u0642\u0637 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627 \u0631\u0627 \u062b\u0628\u062a \u0645\u06cc \u06a9\u0646\u062f \u0648 \u062e\u0637\u0627\u06cc\u06cc \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f<\/li>\n<\/ul>\n<p>\u0627\u06af\u0631 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0628\u0627 \u0622\u0646 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0647 \u0648 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f <code>.\/httpmon curl http:\/\/example.com<\/code>\u060c \u062e\u0648\u0627\u0647\u06cc\u062f \u062f\u06cc\u062f \u06a9\u0647 \u0627\u06cc\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0631\u0627 \u0636\u0628\u0637 \u0645\u06cc \u06a9\u0646\u062f \u0627\u0645\u0627 \u0647\u0646\u0648\u0632 \u0622\u0646 \u0631\u0627 \u0627\u0631\u0633\u0627\u0644 \u0646\u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B1%D8%B3%D8%A7%D9%84_%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA_HTTP\"><\/span>\n<p>  \u0627\u0631\u0633\u0627\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a HTTP<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062d\u0627\u0644 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u067e\u0631\u0648\u06a9\u0633\u06cc \u0645\u0627 \u0631\u0627 \u062f\u0631 \u0648\u0627\u0642\u0639 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc HTTP \u0631\u0627 \u0628\u0647 \u062c\u0644\u0648 \u0628\u06a9\u0634\u06cc\u0645 \u0648 \u0647\u0631 \u062f\u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0648 \u067e\u0627\u0633\u062e \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u0645. \u0645\u0627 \u0627\u0632 Go \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f <code>httputil.ReverseProxy<\/code> \u0628\u0631\u0627\u06cc \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u0648\u0632\u0646\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc \u0633\u0646\u06af\u06cc\u0646:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"40\">\n<pre class=\"highlight go\"><code><span class=\"k\">package<\/span> <span class=\"n\">main<\/span>\n\n<span class=\"k\">import<\/span> <span class=\"p\">(<\/span>\n    <span class=\"s\">\"bytes\"<\/span>\n    <span class=\"s\">\"fmt\"<\/span>\n    <span class=\"s\">\"io\"<\/span>\n    <span class=\"s\">\"net\/http\"<\/span>\n    <span class=\"s\">\"net\/http\/httputil\"<\/span>\n    <span class=\"s\">\"os\"<\/span>\n    <span class=\"s\">\"os\/exec\"<\/span>\n    <span class=\"s\">\"strings\"<\/span>\n    <span class=\"s\">\"time\"<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"k\">type<\/span> <span class=\"n\">LoggingTransport<\/span> <span class=\"k\">struct<\/span><span class=\"p\">{}<\/span>\n\n<span class=\"k\">func<\/span> <span class=\"p\">(<\/span><span class=\"n\">t<\/span> <span class=\"o\">*<\/span><span class=\"n\">LoggingTransport<\/span><span class=\"p\">)<\/span> <span class=\"n\">RoundTrip<\/span><span class=\"p\">(<\/span><span class=\"n\">req<\/span> <span class=\"o\">*<\/span><span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Request<\/span><span class=\"p\">)<\/span> <span class=\"p\">(<\/span><span class=\"o\">*<\/span><span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Response<\/span><span class=\"p\">,<\/span> <span class=\"kt\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">=== REQUEST ===<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"%s %s %s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">Method<\/span><span class=\"p\">,<\/span> <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">URL<\/span><span class=\"o\">.<\/span><span class=\"n\">String<\/span><span class=\"p\">(),<\/span> <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">Proto<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Host: %s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">Host<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">Headers:\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">for<\/span> <span class=\"n\">k<\/span><span class=\"p\">,<\/span> <span class=\"n\">v<\/span> <span class=\"o\">:=<\/span> <span class=\"k\">range<\/span> <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">Header<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"  %s: %s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">k<\/span><span class=\"p\">,<\/span> <span class=\"n\">strings<\/span><span class=\"o\">.<\/span><span class=\"n\">Join<\/span><span class=\"p\">(<\/span><span class=\"n\">v<\/span><span class=\"p\">,<\/span> <span class=\"s\">\", \"<\/span><span class=\"p\">))<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">var<\/span> <span class=\"n\">bodyBytes<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">byte<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">Body<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">bodyBytes<\/span><span class=\"p\">,<\/span> <span class=\"n\">_<\/span> <span class=\"o\">=<\/span> <span class=\"n\">io<\/span><span class=\"o\">.<\/span><span class=\"n\">ReadAll<\/span><span class=\"p\">(<\/span><span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">Body<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">Body<\/span> <span class=\"o\">=<\/span> <span class=\"n\">io<\/span><span class=\"o\">.<\/span><span class=\"n\">NopCloser<\/span><span class=\"p\">(<\/span><span class=\"n\">bytes<\/span><span class=\"o\">.<\/span><span class=\"n\">NewReader<\/span><span class=\"p\">(<\/span><span class=\"n\">bodyBytes<\/span><span class=\"p\">))<\/span>\n        <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">bodyBytes<\/span><span class=\"p\">)<\/span> <span class=\"o\">&gt;<\/span> <span class=\"m\">0<\/span> <span class=\"p\">{<\/span>\n            <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">Body:<\/span><span class=\"se\">\\n<\/span><span class=\"s\">%s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"kt\">string<\/span><span class=\"p\">(<\/span><span class=\"n\">bodyBytes<\/span><span class=\"p\">))<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">transport<\/span> <span class=\"o\">:=<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Transport<\/span><span class=\"p\">{}<\/span>\n    <span class=\"n\">resp<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">transport<\/span><span class=\"o\">.<\/span><span class=\"n\">RoundTrip<\/span><span class=\"p\">(<\/span><span class=\"n\">req<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">ERROR: %v<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">return<\/span> <span class=\"no\">nil<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">=== RESPONSE ===<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"%s %s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">resp<\/span><span class=\"o\">.<\/span><span class=\"n\">Proto<\/span><span class=\"p\">,<\/span> <span class=\"n\">resp<\/span><span class=\"o\">.<\/span><span class=\"n\">Status<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">Headers:\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">for<\/span> <span class=\"n\">k<\/span><span class=\"p\">,<\/span> <span class=\"n\">v<\/span> <span class=\"o\">:=<\/span> <span class=\"k\">range<\/span> <span class=\"n\">resp<\/span><span class=\"o\">.<\/span><span class=\"n\">Header<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"  %s: %s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">k<\/span><span class=\"p\">,<\/span> <span class=\"n\">strings<\/span><span class=\"o\">.<\/span><span class=\"n\">Join<\/span><span class=\"p\">(<\/span><span class=\"n\">v<\/span><span class=\"p\">,<\/span> <span class=\"s\">\", \"<\/span><span class=\"p\">))<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">respBody<\/span><span class=\"p\">,<\/span> <span class=\"n\">_<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">io<\/span><span class=\"o\">.<\/span><span class=\"n\">ReadAll<\/span><span class=\"p\">(<\/span><span class=\"n\">resp<\/span><span class=\"o\">.<\/span><span class=\"n\">Body<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">resp<\/span><span class=\"o\">.<\/span><span class=\"n\">Body<\/span> <span class=\"o\">=<\/span> <span class=\"n\">io<\/span><span class=\"o\">.<\/span><span class=\"n\">NopCloser<\/span><span class=\"p\">(<\/span><span class=\"n\">bytes<\/span><span class=\"o\">.<\/span><span class=\"n\">NewReader<\/span><span class=\"p\">(<\/span><span class=\"n\">respBody<\/span><span class=\"p\">))<\/span>\n\n    <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">respBody<\/span><span class=\"p\">)<\/span> <span class=\"o\">&gt;<\/span> <span class=\"m\">0<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">Body:<\/span><span class=\"se\">\\n<\/span><span class=\"s\">%s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"kt\">string<\/span><span class=\"p\">(<\/span><span class=\"n\">respBody<\/span><span class=\"p\">))<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">strings<\/span><span class=\"o\">.<\/span><span class=\"n\">Repeat<\/span><span class=\"p\">(<\/span><span class=\"s\">\"-\"<\/span><span class=\"p\">,<\/span> <span class=\"m\">60<\/span><span class=\"p\">))<\/span>\n\n    <span class=\"k\">return<\/span> <span class=\"n\">resp<\/span><span class=\"p\">,<\/span> <span class=\"no\">nil<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">func<\/span> <span class=\"n\">proxyHandler<\/span><span class=\"p\">(<\/span><span class=\"n\">w<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">ResponseWriter<\/span><span class=\"p\">,<\/span> <span class=\"n\">r<\/span> <span class=\"o\">*<\/span><span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Request<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">proxy<\/span> <span class=\"o\">:=<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">httputil<\/span><span class=\"o\">.<\/span><span class=\"n\">ReverseProxy<\/span><span class=\"p\">{<\/span>\n        <span class=\"n\">Director<\/span><span class=\"o\">:<\/span> <span class=\"k\">func<\/span><span class=\"p\">(<\/span><span class=\"n\">req<\/span> <span class=\"o\">*<\/span><span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Request<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">if<\/span> <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">URL<\/span><span class=\"o\">.<\/span><span class=\"n\">Scheme<\/span> <span class=\"o\">==<\/span> <span class=\"s\">\"\"<\/span> <span class=\"p\">{<\/span>\n                <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">URL<\/span><span class=\"o\">.<\/span><span class=\"n\">Scheme<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"http\"<\/span>\n            <span class=\"p\">}<\/span>\n            <span class=\"k\">if<\/span> <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">URL<\/span><span class=\"o\">.<\/span><span class=\"n\">Host<\/span> <span class=\"o\">==<\/span> <span class=\"s\">\"\"<\/span> <span class=\"p\">{<\/span>\n                <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">URL<\/span><span class=\"o\">.<\/span><span class=\"n\">Host<\/span> <span class=\"o\">=<\/span> <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">Host<\/span>\n            <span class=\"p\">}<\/span>\n        <span class=\"p\">},<\/span>\n        <span class=\"n\">Transport<\/span><span class=\"o\">:<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">LoggingTransport<\/span><span class=\"p\">{},<\/span>\n    <span class=\"p\">}<\/span>\n    <span class=\"n\">proxy<\/span><span class=\"o\">.<\/span><span class=\"n\">ServeHTTP<\/span><span class=\"p\">(<\/span><span class=\"n\">w<\/span><span class=\"p\">,<\/span> <span class=\"n\">r<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u06a9\u062f:<\/p>\n<ol>\n<li>\n<strong>\u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645<\/strong>: \u062d\u0645\u0644 \u0648 \u0646\u0642\u0644 \u0633\u0641\u0627\u0631\u0634\u06cc \u06a9\u0647 \u0645\u0639\u0627\u0645\u0644\u0627\u062a HTTP \u0631\u0627 \u0631\u0647\u06af\u06cc\u0631\u06cc \u0648 \u062b\u0628\u062a \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<li>\n<strong>\u067e\u06cc\u0634\u0631\u0648<\/strong>: \u0627\u0632 \u0645\u062c\u0627\u0648\u0631\u062a \u0648\u0627\u0642\u0639\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627 \u0628\u0631\u062e\u0648\u0631\u062f \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<li>\n<strong>\u062f\u0631\u062e\u0648\u0627\u0633\u062a\/\u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645<\/strong>: \u0647\u062f\u0631 \u0648 \u0628\u062f\u0646 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0647\u0631 \u062f\u0648 \u062c\u0647\u062a \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f<\/li>\n<\/ol>\n<p>\u062f\u0631 <code>RoundTrip<\/code> \u0631\u0648\u0634 \u062c\u0627\u06cc\u06cc \u0627\u0633\u062a \u06a9\u0647 \u062c\u0627\u062f\u0648 \u0627\u062a\u0641\u0627\u0642 \u0645\u06cc \u0627\u0641\u062a\u062f &#8211; \u0628\u0631\u0627\u06cc \u0647\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a HTTP \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u0634\u0648\u062f \u0648 \u0628\u0647 \u0645\u0627 \u0641\u0631\u0635\u062a\u06cc \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u0647\u0645\u0647 \u0686\u06cc\u0632 \u0631\u0627 \u0642\u0628\u0644 \u0648 \u0628\u0639\u062f \u0627\u0632 \u062a\u0645\u0627\u0633 \u0648\u0627\u0642\u0639\u06cc \u0634\u0628\u06a9\u0647 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u062d\u0627\u0644\u0627 \u0627\u06af\u0631 \u062f\u0648\u06cc\u062f\u06cc\u062f <code>.\/httpmon curl http:\/\/httpbin.org\/get<\/code>\u060c \u0647\u0631 \u062f\u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a Curl \u0631\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u062f \u0648 \u067e\u0627\u0633\u062e\u06cc \u06a9\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u062f \u060c \u0628\u0627 \u062a\u0645\u0627\u0645 \u0639\u0646\u0627\u0648\u06cc\u0646 \u0648 \u0645\u062d\u062a\u0648\u0627\u06cc \u0628\u062f\u0646 \u0642\u0627\u0628\u0644 \u0645\u0634\u0627\u0647\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B1%D8%B3%DB%8C%D8%AF%DA%AF%DB%8C_%D8%A8%D9%87_%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA_%D9%87%D8%A7%DB%8C_HTTPS\"><\/span>\n<p>  \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc HTTPS<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631\u062e\u0648\u0627\u0633\u062a HTTPS \u0645\u062a\u0641\u0627\u0648\u062a \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f. \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0645\u0634\u062a\u0631\u06cc \u0645\u06cc \u062e\u0648\u0627\u0647\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a HTTPS \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u067e\u0631\u0648\u06a9\u0633\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u062f \u060c \u0627\u0628\u062a\u062f\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u062a\u0635\u0627\u0644 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u062a\u0648\u0646\u0644 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f. \u0628\u06cc\u0627\u06cc\u06cc\u062f \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u0627\u06cc\u0646 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"27\">\n<pre class=\"highlight go\"><code><span class=\"k\">func<\/span> <span class=\"n\">handleConnect<\/span><span class=\"p\">(<\/span><span class=\"n\">w<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">ResponseWriter<\/span><span class=\"p\">,<\/span> <span class=\"n\">r<\/span> <span class=\"o\">*<\/span><span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Request<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">=== CONNECT %s ===<\/span><span class=\"se\">\\n\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">r<\/span><span class=\"o\">.<\/span><span class=\"n\">Host<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">targetConn<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">net<\/span><span class=\"o\">.<\/span><span class=\"n\">Dial<\/span><span class=\"p\">(<\/span><span class=\"s\">\"tcp\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">r<\/span><span class=\"o\">.<\/span><span class=\"n\">Host<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Error<\/span><span class=\"p\">(<\/span><span class=\"n\">w<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"o\">.<\/span><span class=\"n\">Error<\/span><span class=\"p\">(),<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">StatusServiceUnavailable<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">return<\/span>\n    <span class=\"p\">}<\/span>\n    <span class=\"k\">defer<\/span> <span class=\"n\">targetConn<\/span><span class=\"o\">.<\/span><span class=\"n\">Close<\/span><span class=\"p\">()<\/span>\n\n    <span class=\"n\">w<\/span><span class=\"o\">.<\/span><span class=\"n\">WriteHeader<\/span><span class=\"p\">(<\/span><span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">StatusOK<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">hijacker<\/span><span class=\"p\">,<\/span> <span class=\"n\">ok<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">w<\/span><span class=\"o\">.<\/span><span class=\"p\">(<\/span><span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Hijacker<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"o\">!<\/span><span class=\"n\">ok<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Error<\/span><span class=\"p\">(<\/span><span class=\"n\">w<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"Hijacking not supported\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">StatusInternalServerError<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">return<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">clientConn<\/span><span class=\"p\">,<\/span> <span class=\"n\">_<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">hijacker<\/span><span class=\"o\">.<\/span><span class=\"n\">Hijack<\/span><span class=\"p\">()<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Error<\/span><span class=\"p\">(<\/span><span class=\"n\">w<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"o\">.<\/span><span class=\"n\">Error<\/span><span class=\"p\">(),<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">StatusServiceUnavailable<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">return<\/span>\n    <span class=\"p\">}<\/span>\n    <span class=\"k\">defer<\/span> <span class=\"n\">clientConn<\/span><span class=\"o\">.<\/span><span class=\"n\">Close<\/span><span class=\"p\">()<\/span>\n\n    <span class=\"k\">go<\/span> <span class=\"n\">io<\/span><span class=\"o\">.<\/span><span class=\"n\">Copy<\/span><span class=\"p\">(<\/span><span class=\"n\">targetConn<\/span><span class=\"p\">,<\/span> <span class=\"n\">clientConn<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">go<\/span> <span class=\"n\">io<\/span><span class=\"o\">.<\/span><span class=\"n\">Copy<\/span><span class=\"p\">(<\/span><span class=\"n\">clientConn<\/span><span class=\"p\">,<\/span> <span class=\"n\">targetConn<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">func<\/span> <span class=\"n\">proxyHandler<\/span><span class=\"p\">(<\/span><span class=\"n\">w<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">ResponseWriter<\/span><span class=\"p\">,<\/span> <span class=\"n\">r<\/span> <span class=\"o\">*<\/span><span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Request<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">r<\/span><span class=\"o\">.<\/span><span class=\"n\">Method<\/span> <span class=\"o\">==<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">MethodConnect<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">handleConnect<\/span><span class=\"p\">(<\/span><span class=\"n\">w<\/span><span class=\"p\">,<\/span> <span class=\"n\">r<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u06a9\u062f:<\/p>\n<ol>\n<li>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0631\u0627 \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc \u062f\u0647\u062f (\u0628\u0631\u0627\u06cc HTTPS \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f)<\/li>\n<li>\u0627\u062a\u0635\u0627\u0644 TCP \u0631\u0627 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0647\u062f\u0641 \u0628\u0631\u0642\u0631\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<li>&#8220;Hijacks&#8221; \u0627\u062a\u0635\u0627\u0644 HTTP \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 TCP \u062e\u0627\u0645<\/li>\n<li>\u06cc\u06a9 \u062a\u0648\u0646\u0644 \u062f\u0648 \u0637\u0631\u0641\u0647 \u0628\u06cc\u0646 \u0645\u0634\u062a\u0631\u06cc \u0648 \u0633\u0631\u0648\u0631 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<\/ol>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644 \u060c \u0628\u0627 \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u060c \u0645\u0627 \u0641\u0642\u0637 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u062a\u0635\u0627\u0644 \u0631\u0627 \u0645\u06cc \u0628\u06cc\u0646\u06cc\u0645 &#8211; \u0645\u062d\u062a\u0648\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc HTTPS \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a. \u0628\u0631\u0627\u06cc \u0631\u0645\u0632\u06af\u0634\u0627\u06cc\u06cc \u062a\u0631\u0627\u0641\u06cc\u06a9 HTTPS \u060c \u0645\u0627 \u0628\u0627\u06cc\u062f \u062e\u0627\u062a\u0645\u0647 TLS \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AA%D9%86%D8%B8%DB%8C%D9%85_MITM_%D8%A8%D8%B1%D8%A7%DB%8C_https\"><\/span>\n<p>  \u062a\u0646\u0638\u06cc\u0645 MITM \u0628\u0631\u0627\u06cc https<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0627\u06cc \u0631\u0645\u0632\u06af\u0634\u0627\u06cc\u06cc \u062a\u0631\u0627\u0641\u06cc\u06a9 HTTPS \u060c \u0645\u0627 \u0628\u0627\u06cc\u062f:<\/p>\n<ol>\n<li>\u0645\u0631\u062c\u0639 \u06af\u0648\u0627\u0647\u06cc\u0646\u0627\u0645\u0647 \u062e\u0648\u062f\u0645\u0627\u0646 (CA) \u0631\u0627 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u0628\u0631\u0627\u06cc \u0647\u0631 \u0645\u06cc\u0632\u0628\u0627\u0646 HTTPS \u06af\u0648\u0627\u0647\u06cc\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u062e\u0627\u062a\u0645\u0647 TLS \u0648 \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc \u0645\u062c\u062f\u062f \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f<\/li>\n<\/ol>\n<p>\u0627\u0628\u062a\u062f\u0627 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u062a\u0648\u0644\u06cc\u062f \u06af\u0648\u0627\u0647\u06cc \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"42\">\n<pre class=\"highlight go\"><code><span class=\"k\">import<\/span> <span class=\"p\">(<\/span>\n    <span class=\"s\">\"crypto\/rand\"<\/span>\n    <span class=\"s\">\"crypto\/rsa\"<\/span>\n    <span class=\"s\">\"crypto\/tls\"<\/span>\n    <span class=\"s\">\"crypto\/x509\"<\/span>\n    <span class=\"s\">\"crypto\/x509\/pkix\"<\/span>\n    <span class=\"s\">\"math\/big\"<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"k\">var<\/span> <span class=\"p\">(<\/span>\n    <span class=\"n\">caCert<\/span> <span class=\"o\">*<\/span><span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">Certificate<\/span>\n    <span class=\"n\">caKey<\/span>  <span class=\"o\">*<\/span><span class=\"n\">rsa<\/span><span class=\"o\">.<\/span><span class=\"n\">PrivateKey<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"k\">func<\/span> <span class=\"n\">init<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">var<\/span> <span class=\"n\">err<\/span> <span class=\"kt\">error<\/span>\n    <span class=\"n\">caCert<\/span><span class=\"p\">,<\/span> <span class=\"n\">caKey<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">=<\/span> <span class=\"n\">generateCA<\/span><span class=\"p\">()<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Fatal<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to generate CA:\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">func<\/span> <span class=\"n\">generateCA<\/span><span class=\"p\">()<\/span> <span class=\"p\">(<\/span><span class=\"o\">*<\/span><span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">Certificate<\/span><span class=\"p\">,<\/span> <span class=\"o\">*<\/span><span class=\"n\">rsa<\/span><span class=\"o\">.<\/span><span class=\"n\">PrivateKey<\/span><span class=\"p\">,<\/span> <span class=\"kt\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">rsa<\/span><span class=\"o\">.<\/span><span class=\"n\">GenerateKey<\/span><span class=\"p\">(<\/span><span class=\"n\">rand<\/span><span class=\"o\">.<\/span><span class=\"n\">Reader<\/span><span class=\"p\">,<\/span> <span class=\"m\">2048<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"no\">nil<\/span><span class=\"p\">,<\/span> <span class=\"no\">nil<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">template<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">Certificate<\/span><span class=\"p\">{<\/span>\n        <span class=\"n\">SerialNumber<\/span><span class=\"o\">:<\/span> <span class=\"n\">big<\/span><span class=\"o\">.<\/span><span class=\"n\">NewInt<\/span><span class=\"p\">(<\/span><span class=\"m\">1<\/span><span class=\"p\">),<\/span>\n        <span class=\"n\">Subject<\/span><span class=\"o\">:<\/span> <span class=\"n\">pkix<\/span><span class=\"o\">.<\/span><span class=\"n\">Name<\/span><span class=\"p\">{<\/span>\n            <span class=\"n\">Organization<\/span><span class=\"o\">:<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">string<\/span><span class=\"p\">{<\/span><span class=\"s\">\"HTTP Monitor CA\"<\/span><span class=\"p\">},<\/span>\n        <span class=\"p\">},<\/span>\n        <span class=\"n\">NotBefore<\/span><span class=\"o\">:<\/span>             <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Now<\/span><span class=\"p\">(),<\/span>\n        <span class=\"n\">NotAfter<\/span><span class=\"o\">:<\/span>              <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Now<\/span><span class=\"p\">()<\/span><span class=\"o\">.<\/span><span class=\"n\">AddDate<\/span><span class=\"p\">(<\/span><span class=\"m\">10<\/span><span class=\"p\">,<\/span> <span class=\"m\">0<\/span><span class=\"p\">,<\/span> <span class=\"m\">0<\/span><span class=\"p\">),<\/span>\n        <span class=\"n\">KeyUsage<\/span><span class=\"o\">:<\/span>              <span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">KeyUsageKeyEncipherment<\/span> <span class=\"o\">|<\/span> <span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">KeyUsageDigitalSignature<\/span> <span class=\"o\">|<\/span> <span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">KeyUsageCertSign<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">ExtKeyUsage<\/span><span class=\"o\">:<\/span>           <span class=\"p\">[]<\/span><span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">ExtKeyUsage<\/span><span class=\"p\">{<\/span><span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">ExtKeyUsageServerAuth<\/span><span class=\"p\">},<\/span>\n        <span class=\"n\">BasicConstraintsValid<\/span><span class=\"o\">:<\/span> <span class=\"no\">true<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">IsCA<\/span><span class=\"o\">:<\/span>                  <span class=\"no\">true<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">certDER<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">CreateCertificate<\/span><span class=\"p\">(<\/span><span class=\"n\">rand<\/span><span class=\"o\">.<\/span><span class=\"n\">Reader<\/span><span class=\"p\">,<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">template<\/span><span class=\"p\">,<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">template<\/span><span class=\"p\">,<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">key<\/span><span class=\"o\">.<\/span><span class=\"n\">PublicKey<\/span><span class=\"p\">,<\/span> <span class=\"n\">key<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"no\">nil<\/span><span class=\"p\">,<\/span> <span class=\"no\">nil<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">cert<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">ParseCertificate<\/span><span class=\"p\">(<\/span><span class=\"n\">certDER<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"no\">nil<\/span><span class=\"p\">,<\/span> <span class=\"no\">nil<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">return<\/span> <span class=\"n\">cert<\/span><span class=\"p\">,<\/span> <span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"no\">nil<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u06cc\u06a9 CA \u062e\u0648\u062f \u0627\u0645\u0636\u0627 \u0634\u062f\u0647 \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0645\u0627 \u0628\u0631\u0627\u06cc \u0627\u0645\u0636\u0627\u06cc \u06af\u0648\u0627\u0647\u06cc\u0646\u0627\u0645\u0647 \u0647\u0627 \u0628\u0631\u0627\u06cc \u0647\u0631 \u062f\u0627\u0645\u0646\u0647 HTTPS \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f. CA \u06cc\u06a9 \u0628\u0627\u0631 \u0628\u0627 \u0634\u0631\u0648\u0639 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648 \u062f\u0631 \u062d\u0627\u0641\u0638\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B1%D9%87%DA%AF%DB%8C%D8%B1%DB%8C_%D9%88_%D8%B1%D9%85%D8%B2%DA%AF%D8%B4%D8%A7%DB%8C%DB%8C_%D8%AA%D8%B1%D8%A7%D9%81%DB%8C%DA%A9_HTTPS\"><\/span>\n<p>  \u0631\u0647\u06af\u06cc\u0631\u06cc \u0648 \u0631\u0645\u0632\u06af\u0634\u0627\u06cc\u06cc \u062a\u0631\u0627\u0641\u06cc\u06a9 HTTPS<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062d\u0627\u0644 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0631\u0647\u06af\u06cc\u0631\u06cc HTTPS \u0648\u0627\u0642\u0639\u06cc \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u0645. \u0645\u0627 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u0627\u062a\u0635\u0627\u0644 \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u062e\u0627\u062a\u0645\u0647 TLS \u0627\u0635\u0644\u0627\u062d \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"55\">\n<pre class=\"highlight go\"><code><span class=\"k\">func<\/span> <span class=\"n\">generateCert<\/span><span class=\"p\">(<\/span><span class=\"n\">host<\/span> <span class=\"kt\">string<\/span><span class=\"p\">)<\/span> <span class=\"p\">(<\/span><span class=\"o\">*<\/span><span class=\"n\">tls<\/span><span class=\"o\">.<\/span><span class=\"n\">Certificate<\/span><span class=\"p\">,<\/span> <span class=\"kt\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">rsa<\/span><span class=\"o\">.<\/span><span class=\"n\">GenerateKey<\/span><span class=\"p\">(<\/span><span class=\"n\">rand<\/span><span class=\"o\">.<\/span><span class=\"n\">Reader<\/span><span class=\"p\">,<\/span> <span class=\"m\">2048<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"no\">nil<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">template<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">Certificate<\/span><span class=\"p\">{<\/span>\n        <span class=\"n\">SerialNumber<\/span><span class=\"o\">:<\/span> <span class=\"n\">big<\/span><span class=\"o\">.<\/span><span class=\"n\">NewInt<\/span><span class=\"p\">(<\/span><span class=\"m\">1<\/span><span class=\"p\">),<\/span>\n        <span class=\"n\">Subject<\/span><span class=\"o\">:<\/span> <span class=\"n\">pkix<\/span><span class=\"o\">.<\/span><span class=\"n\">Name<\/span><span class=\"p\">{<\/span>\n            <span class=\"n\">Organization<\/span><span class=\"o\">:<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">string<\/span><span class=\"p\">{<\/span><span class=\"s\">\"HTTP Monitor\"<\/span><span class=\"p\">},<\/span>\n        <span class=\"p\">},<\/span>\n        <span class=\"n\">NotBefore<\/span><span class=\"o\">:<\/span>    <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Now<\/span><span class=\"p\">(),<\/span>\n        <span class=\"n\">NotAfter<\/span><span class=\"o\">:<\/span>     <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Now<\/span><span class=\"p\">()<\/span><span class=\"o\">.<\/span><span class=\"n\">AddDate<\/span><span class=\"p\">(<\/span><span class=\"m\">1<\/span><span class=\"p\">,<\/span> <span class=\"m\">0<\/span><span class=\"p\">,<\/span> <span class=\"m\">0<\/span><span class=\"p\">),<\/span>\n        <span class=\"n\">KeyUsage<\/span><span class=\"o\">:<\/span>     <span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">KeyUsageKeyEncipherment<\/span> <span class=\"o\">|<\/span> <span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">KeyUsageDigitalSignature<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">ExtKeyUsage<\/span><span class=\"o\">:<\/span>  <span class=\"p\">[]<\/span><span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">ExtKeyUsage<\/span><span class=\"p\">{<\/span><span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">ExtKeyUsageServerAuth<\/span><span class=\"p\">},<\/span>\n        <span class=\"n\">DNSNames<\/span><span class=\"o\">:<\/span>     <span class=\"p\">[]<\/span><span class=\"kt\">string<\/span><span class=\"p\">{<\/span><span class=\"n\">host<\/span><span class=\"p\">},<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">certDER<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">CreateCertificate<\/span><span class=\"p\">(<\/span><span class=\"n\">rand<\/span><span class=\"o\">.<\/span><span class=\"n\">Reader<\/span><span class=\"p\">,<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">template<\/span><span class=\"p\">,<\/span> <span class=\"n\">caCert<\/span><span class=\"p\">,<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">key<\/span><span class=\"o\">.<\/span><span class=\"n\">PublicKey<\/span><span class=\"p\">,<\/span> <span class=\"n\">caKey<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"no\">nil<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">cert<\/span> <span class=\"o\">:=<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">tls<\/span><span class=\"o\">.<\/span><span class=\"n\">Certificate<\/span><span class=\"p\">{<\/span>\n        <span class=\"n\">Certificate<\/span><span class=\"o\">:<\/span> <span class=\"p\">[][]<\/span><span class=\"kt\">byte<\/span><span class=\"p\">{<\/span><span class=\"n\">certDER<\/span><span class=\"p\">},<\/span>\n        <span class=\"n\">PrivateKey<\/span><span class=\"o\">:<\/span>  <span class=\"n\">key<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">return<\/span> <span class=\"n\">cert<\/span><span class=\"p\">,<\/span> <span class=\"no\">nil<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">func<\/span> <span class=\"n\">handleConnect<\/span><span class=\"p\">(<\/span><span class=\"n\">w<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">ResponseWriter<\/span><span class=\"p\">,<\/span> <span class=\"n\">r<\/span> <span class=\"o\">*<\/span><span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Request<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">=== CONNECT %s ===<\/span><span class=\"se\">\\n\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">r<\/span><span class=\"o\">.<\/span><span class=\"n\">Host<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">host<\/span><span class=\"p\">,<\/span> <span class=\"n\">_<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">net<\/span><span class=\"o\">.<\/span><span class=\"n\">SplitHostPort<\/span><span class=\"p\">(<\/span><span class=\"n\">r<\/span><span class=\"o\">.<\/span><span class=\"n\">Host<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">host<\/span> <span class=\"o\">=<\/span> <span class=\"n\">r<\/span><span class=\"o\">.<\/span><span class=\"n\">Host<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">cert<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">generateCert<\/span><span class=\"p\">(<\/span><span class=\"n\">host<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Error<\/span><span class=\"p\">(<\/span><span class=\"n\">w<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"o\">.<\/span><span class=\"n\">Error<\/span><span class=\"p\">(),<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">StatusInternalServerError<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">return<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">w<\/span><span class=\"o\">.<\/span><span class=\"n\">WriteHeader<\/span><span class=\"p\">(<\/span><span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">StatusOK<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">hijacker<\/span><span class=\"p\">,<\/span> <span class=\"n\">ok<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">w<\/span><span class=\"o\">.<\/span><span class=\"p\">(<\/span><span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Hijacker<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"o\">!<\/span><span class=\"n\">ok<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Error<\/span><span class=\"p\">(<\/span><span class=\"n\">w<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"Hijacking not supported\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">StatusInternalServerError<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">return<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">clientConn<\/span><span class=\"p\">,<\/span> <span class=\"n\">_<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">hijacker<\/span><span class=\"o\">.<\/span><span class=\"n\">Hijack<\/span><span class=\"p\">()<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Error<\/span><span class=\"p\">(<\/span><span class=\"n\">w<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"o\">.<\/span><span class=\"n\">Error<\/span><span class=\"p\">(),<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">StatusServiceUnavailable<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">return<\/span>\n    <span class=\"p\">}<\/span>\n    <span class=\"k\">defer<\/span> <span class=\"n\">clientConn<\/span><span class=\"o\">.<\/span><span class=\"n\">Close<\/span><span class=\"p\">()<\/span>\n\n    <span class=\"n\">tlsConfig<\/span> <span class=\"o\">:=<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">tls<\/span><span class=\"o\">.<\/span><span class=\"n\">Config<\/span><span class=\"p\">{<\/span>\n        <span class=\"n\">Certificates<\/span><span class=\"o\">:<\/span> <span class=\"p\">[]<\/span><span class=\"n\">tls<\/span><span class=\"o\">.<\/span><span class=\"n\">Certificate<\/span><span class=\"p\">{<\/span><span class=\"o\">*<\/span><span class=\"n\">cert<\/span><span class=\"p\">},<\/span>\n    <span class=\"p\">}<\/span>\n    <span class=\"n\">tlsConn<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">tls<\/span><span class=\"o\">.<\/span><span class=\"n\">Server<\/span><span class=\"p\">(<\/span><span class=\"n\">clientConn<\/span><span class=\"p\">,<\/span> <span class=\"n\">tlsConfig<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">defer<\/span> <span class=\"n\">tlsConn<\/span><span class=\"o\">.<\/span><span class=\"n\">Close<\/span><span class=\"p\">()<\/span>\n\n    <span class=\"n\">reader<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">bufio<\/span><span class=\"o\">.<\/span><span class=\"n\">NewReader<\/span><span class=\"p\">(<\/span><span class=\"n\">tlsConn<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"k\">for<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">req<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">ReadRequest<\/span><span class=\"p\">(<\/span><span class=\"n\">reader<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"n\">io<\/span><span class=\"o\">.<\/span><span class=\"n\">EOF<\/span> <span class=\"p\">{<\/span>\n                <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Error reading request: %v<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">}<\/span>\n            <span class=\"k\">break<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">URL<\/span><span class=\"o\">.<\/span><span class=\"n\">Scheme<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"https\"<\/span>\n        <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">URL<\/span><span class=\"o\">.<\/span><span class=\"n\">Host<\/span> <span class=\"o\">=<\/span> <span class=\"n\">r<\/span><span class=\"o\">.<\/span><span class=\"n\">Host<\/span>\n        <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">RequestURI<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"\"<\/span>\n\n        <span class=\"n\">logRequest<\/span><span class=\"p\">(<\/span><span class=\"n\">req<\/span><span class=\"p\">)<\/span>\n\n        <span class=\"n\">client<\/span> <span class=\"o\">:=<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Client<\/span><span class=\"p\">{<\/span>\n            <span class=\"n\">Transport<\/span><span class=\"o\">:<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Transport<\/span><span class=\"p\">{<\/span>\n                <span class=\"n\">TLSClientConfig<\/span><span class=\"o\">:<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">tls<\/span><span class=\"o\">.<\/span><span class=\"n\">Config<\/span><span class=\"p\">{<\/span><span class=\"n\">InsecureSkipVerify<\/span><span class=\"o\">:<\/span> <span class=\"no\">true<\/span><span class=\"p\">},<\/span>\n            <span class=\"p\">},<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"n\">resp<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">client<\/span><span class=\"o\">.<\/span><span class=\"n\">Do<\/span><span class=\"p\">(<\/span><span class=\"n\">req<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n            <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Error making request: %v<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n            <span class=\"k\">continue<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"n\">logResponse<\/span><span class=\"p\">(<\/span><span class=\"n\">resp<\/span><span class=\"p\">)<\/span>\n\n        <span class=\"n\">resp<\/span><span class=\"o\">.<\/span><span class=\"n\">Write<\/span><span class=\"p\">(<\/span><span class=\"n\">tlsConn<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">resp<\/span><span class=\"o\">.<\/span><span class=\"n\">Body<\/span><span class=\"o\">.<\/span><span class=\"n\">Close<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0641\u0627\u0647\u06cc\u0645 \u06a9\u0644\u06cc\u062f\u06cc \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627:<\/p>\n<ol>\n<li>\n<strong>\u062a\u0648\u0644\u06cc\u062f \u06af\u0648\u0627\u0647\u06cc\u0646\u0627\u0645\u0647<\/strong>: \u0645\u0627 \u0628\u0631\u0627\u06cc \u0647\u0631 \u062f\u0627\u0645\u0646\u0647 \u06cc\u06a9 \u06af\u0648\u0627\u0647\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u060c \u06a9\u0647 \u062a\u0648\u0633\u0637 CA \u0645\u0627 \u0627\u0645\u0636\u0627 \u0634\u062f\u0647 \u0627\u0633\u062a<\/li>\n<li>\n<strong>\u0633\u0631\u0648\u0631 TLS<\/strong>: \u0645\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06af\u0648\u0627\u0647\u06cc\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u06cc\u06a9 \u0627\u062a\u0635\u0627\u0644 TLS \u0628\u0627 \u0645\u0634\u062a\u0631\u06cc \u0628\u0631\u0642\u0631\u0627\u0631 \u0645\u06cc \u06a9\u0646\u06cc\u0645<\/li>\n<li>\n<strong>\u062d\u0644\u0642\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a<\/strong>: \u0645\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc HTTP \u0631\u0627 \u0627\u0632 \u0627\u062a\u0635\u0627\u0644 TLS \u062e\u0648\u0627\u0646\u062f\u0647 \u0627\u06cc\u0645 \u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc HTTPS \u0648\u0627\u0642\u0639\u06cc \u0648 \u067e\u0627\u0633\u062e \u0647\u0627\u06cc \u0631\u0648 \u0628\u0647 \u062c\u0644\u0648 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u06cc\u0645<\/li>\n<li>\n<strong>\u0645\u062c\u0627\u0648\u0631\u062a \u0634\u0641\u0627\u0641<\/strong>: \u0645\u0634\u062a\u0631\u06cc \u0641\u06a9\u0631 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0627 \u0633\u0631\u0648\u0631 \u0648\u0627\u0642\u0639\u06cc \u0635\u062d\u0628\u062a \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<\/ol>\n<p>\u062c\u0631\u06cc\u0627\u0646 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"7\">\n<pre class=\"highlight plaintext\"><code>Client \u2192 [TLS with our cert] \u2192 Our Proxy \u2192 [TLS with real cert] \u2192 Server\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u0628\u0647 \u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u0627\u0632 \u0647\u0631 \u062f\u0648 \u062c\u0647\u062a \u062a\u0631\u0627\u0641\u06cc\u06a9 HTTPS \u0631\u0645\u0632\u06af\u0634\u0627\u06cc\u06cc \u0634\u062f\u0647 \u0631\u0627 \u0628\u0628\u06cc\u0646\u06cc\u0645.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D8%B1%D8%AF%D9%86_%D9%BE%D8%B4%D8%AA%DB%8C%D8%A8%D8%A7%D9%86%DB%8C_CURL_%D9%88_AWS_CLI\"><\/span>\n<p>  \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc CURL \u0648 AWS CLI<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u0628\u0627\u06cc\u062f \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u067e\u0631\u0648\u06a9\u0633\u06cc \u062e\u0648\u062f \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0628\u0647 \u06af\u0648\u0627\u0647\u06cc CA \u062e\u0648\u062f \u0627\u0639\u062a\u0645\u0627\u062f \u06a9\u0646\u06cc\u0645. \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0628\u0647 \u0631\u0648\u06cc\u06a9\u0631\u062f\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u0646\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"37\">\n<pre class=\"highlight go\"><code><span class=\"k\">func<\/span> <span class=\"n\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Args<\/span><span class=\"p\">)<\/span> <span class=\"o\">&lt;<\/span> <span class=\"m\">2<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Usage: httpmon <command> [args...]\"<\/command><\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Exit<\/span><span class=\"p\">(<\/span><span class=\"m\">1<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">caCertPEM<\/span> <span class=\"o\">:=<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">bytes<\/span><span class=\"o\">.<\/span><span class=\"n\">Buffer<\/span><span class=\"p\">{}<\/span>\n    <span class=\"n\">pem<\/span><span class=\"o\">.<\/span><span class=\"n\">Encode<\/span><span class=\"p\">(<\/span><span class=\"n\">caCertPEM<\/span><span class=\"p\">,<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">pem<\/span><span class=\"o\">.<\/span><span class=\"n\">Block<\/span><span class=\"p\">{<\/span>\n        <span class=\"n\">Type<\/span><span class=\"o\">:<\/span>  <span class=\"s\">\"CERTIFICATE\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">Bytes<\/span><span class=\"o\">:<\/span> <span class=\"n\">caCert<\/span><span class=\"o\">.<\/span><span class=\"n\">Raw<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">})<\/span>\n\n    <span class=\"n\">caCertFile<\/span> <span class=\"o\">:=<\/span> <span class=\"s\">\"\/tmp\/httpmon-ca.crt\"<\/span>\n    <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">WriteFile<\/span><span class=\"p\">(<\/span><span class=\"n\">caCertFile<\/span><span class=\"p\">,<\/span> <span class=\"n\">caCertPEM<\/span><span class=\"o\">.<\/span><span class=\"n\">Bytes<\/span><span class=\"p\">(),<\/span> <span class=\"m\">0644<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Fatal<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to write CA cert:\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">go<\/span> <span class=\"k\">func<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Starting MITM proxy on :%s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">proxyPort<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"CA certificate written to: %s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">caCertFile<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">ListenAndServe<\/span><span class=\"p\">(<\/span><span class=\"s\">\":\"<\/span><span class=\"o\">+<\/span><span class=\"n\">proxyPort<\/span><span class=\"p\">,<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">HandlerFunc<\/span><span class=\"p\">(<\/span><span class=\"n\">proxyHandler<\/span><span class=\"p\">))<\/span>\n    <span class=\"p\">}()<\/span>\n\n    <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Sleep<\/span><span class=\"p\">(<\/span><span class=\"m\">100<\/span> <span class=\"o\">*<\/span> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Millisecond<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">cmdArgs<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Args<\/span><span class=\"p\">[<\/span><span class=\"m\">1<\/span><span class=\"o\">:<\/span><span class=\"p\">]<\/span>\n\n    <span class=\"k\">if<\/span> <span class=\"n\">strings<\/span><span class=\"o\">.<\/span><span class=\"n\">Contains<\/span><span class=\"p\">(<\/span><span class=\"n\">cmdArgs<\/span><span class=\"p\">[<\/span><span class=\"m\">0<\/span><span class=\"p\">],<\/span> <span class=\"s\">\"curl\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">hasProxy<\/span> <span class=\"o\">:=<\/span> <span class=\"no\">false<\/span>\n        <span class=\"n\">hasCACert<\/span> <span class=\"o\">:=<\/span> <span class=\"no\">false<\/span>\n\n        <span class=\"k\">for<\/span> <span class=\"n\">_<\/span><span class=\"p\">,<\/span> <span class=\"n\">arg<\/span> <span class=\"o\">:=<\/span> <span class=\"k\">range<\/span> <span class=\"n\">cmdArgs<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">if<\/span> <span class=\"n\">arg<\/span> <span class=\"o\">==<\/span> <span class=\"s\">\"-x\"<\/span> <span class=\"o\">||<\/span> <span class=\"n\">arg<\/span> <span class=\"o\">==<\/span> <span class=\"s\">\"--proxy\"<\/span> <span class=\"p\">{<\/span>\n                <span class=\"n\">hasProxy<\/span> <span class=\"o\">=<\/span> <span class=\"no\">true<\/span>\n            <span class=\"p\">}<\/span>\n            <span class=\"k\">if<\/span> <span class=\"n\">arg<\/span> <span class=\"o\">==<\/span> <span class=\"s\">\"--cacert\"<\/span> <span class=\"p\">{<\/span>\n                <span class=\"n\">hasCACert<\/span> <span class=\"o\">=<\/span> <span class=\"no\">true<\/span>\n            <span class=\"p\">}<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"n\">newArgs<\/span> <span class=\"o\">:=<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">string<\/span><span class=\"p\">{<\/span><span class=\"n\">cmdArgs<\/span><span class=\"p\">[<\/span><span class=\"m\">0<\/span><span class=\"p\">]}<\/span>\n        <span class=\"k\">if<\/span> <span class=\"o\">!<\/span><span class=\"n\">hasProxy<\/span> <span class=\"p\">{<\/span>\n            <span class=\"n\">newArgs<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">newArgs<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"-x\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"http:\/\/localhost:\"<\/span><span class=\"o\">+<\/span><span class=\"n\">proxyPort<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">}<\/span>\n        <span class=\"k\">if<\/span> <span class=\"o\">!<\/span><span class=\"n\">hasCACert<\/span> <span class=\"p\">{<\/span>\n            <span class=\"n\">newArgs<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">newArgs<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"--cacert\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">caCertFile<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">}<\/span>\n        <span class=\"n\">newArgs<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">newArgs<\/span><span class=\"p\">,<\/span> <span class=\"n\">cmdArgs<\/span><span class=\"p\">[<\/span><span class=\"m\">1<\/span><span class=\"o\">:<\/span><span class=\"p\">]<\/span><span class=\"o\">...<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">cmdArgs<\/span> <span class=\"o\">=<\/span> <span class=\"n\">newArgs<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">cmd<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">exec<\/span><span class=\"o\">.<\/span><span class=\"n\">Command<\/span><span class=\"p\">(<\/span><span class=\"n\">cmdArgs<\/span><span class=\"p\">[<\/span><span class=\"m\">0<\/span><span class=\"p\">],<\/span> <span class=\"n\">cmdArgs<\/span><span class=\"p\">[<\/span><span class=\"m\">1<\/span><span class=\"o\">:<\/span><span class=\"p\">]<\/span><span class=\"o\">...<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">proxyURL<\/span> <span class=\"o\">:=<\/span> <span class=\"s\">\"http:\/\/localhost:\"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">proxyPort<\/span>\n    <span class=\"n\">cmd<\/span><span class=\"o\">.<\/span><span class=\"n\">Env<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Environ<\/span><span class=\"p\">(),<\/span>\n        <span class=\"s\">\"HTTP_PROXY=\"<\/span><span class=\"o\">+<\/span><span class=\"n\">proxyURL<\/span><span class=\"p\">,<\/span>\n        <span class=\"s\">\"HTTPS_PROXY=\"<\/span><span class=\"o\">+<\/span><span class=\"n\">proxyURL<\/span><span class=\"p\">,<\/span>\n        <span class=\"s\">\"http_proxy=\"<\/span><span class=\"o\">+<\/span><span class=\"n\">proxyURL<\/span><span class=\"p\">,<\/span>\n        <span class=\"s\">\"https_proxy=\"<\/span><span class=\"o\">+<\/span><span class=\"n\">proxyURL<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">)<\/span>\n\n    <span class=\"k\">if<\/span> <span class=\"n\">strings<\/span><span class=\"o\">.<\/span><span class=\"n\">Contains<\/span><span class=\"p\">(<\/span><span class=\"n\">cmdArgs<\/span><span class=\"p\">[<\/span><span class=\"m\">0<\/span><span class=\"p\">],<\/span> <span class=\"s\">\"aws\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">cmd<\/span><span class=\"o\">.<\/span><span class=\"n\">Env<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">cmd<\/span><span class=\"o\">.<\/span><span class=\"n\">Env<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"AWS_CA_BUNDLE=\"<\/span><span class=\"o\">+<\/span><span class=\"n\">caCertFile<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">cmd<\/span><span class=\"o\">.<\/span><span class=\"n\">Stdout<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Stdout<\/span>\n    <span class=\"n\">cmd<\/span><span class=\"o\">.<\/span><span class=\"n\">Stderr<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Stderr<\/span>\n    <span class=\"n\">cmd<\/span><span class=\"o\">.<\/span><span class=\"n\">Stdin<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Stdin<\/span>\n\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">Running: %s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">strings<\/span><span class=\"o\">.<\/span><span class=\"n\">Join<\/span><span class=\"p\">(<\/span><span class=\"n\">cmdArgs<\/span><span class=\"p\">,<\/span> <span class=\"s\">\" \"<\/span><span class=\"p\">))<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"n\">strings<\/span><span class=\"o\">.<\/span><span class=\"n\">Repeat<\/span><span class=\"p\">(<\/span><span class=\"s\">\"=\"<\/span><span class=\"p\">,<\/span> <span class=\"m\">60<\/span><span class=\"p\">))<\/span>\n\n    <span class=\"n\">cmd<\/span><span class=\"o\">.<\/span><span class=\"n\">Run<\/span><span class=\"p\">()<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u062f\u0633\u062a\u0647 \u0647\u0627:<\/p>\n<ol>\n<li>\n<strong>\u0635\u0627\u062f\u0631\u0627\u062a \u06af\u0648\u0627\u0647\u06cc\u0646\u0627\u0645\u0647 CA<\/strong>: \u06af\u0648\u0627\u0647\u06cc CA \u0645\u0627 \u0631\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u062f <code>\/tmp\/httpmon-ca.crt<\/code>\n<\/li>\n<li>\n<strong>\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0641\u0631\u0641\u0631\u06cc<\/strong>: \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u062f <code>-x<\/code> (\u067e\u0631\u0648\u06a9\u0633\u06cc) \u0648 <code>--cacert<\/code> \u067e\u0631\u0686\u0645<\/li>\n<li>\n<strong>\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc AWS CLI<\/strong>: \u0645\u062c\u0645\u0648\u0639\u0647 <code>AWS_CA_BUNDLE<\/code> \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637<\/li>\n<li>\n<strong>\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u0631\u0648\u06a9\u0633\u06cc \u0639\u0645\u0648\u0645\u06cc<\/strong>: \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u067e\u0631\u0648\u06a9\u0633\u06cc \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AF%D8%B1%DA%A9_%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA_%D9%87%D8%A7%DB%8C_AWS_S3\"><\/span>\n<p>  \u062f\u0631\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc AWS S3<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0648\u0642\u062a\u06cc \u062f\u0648\u06cc\u062f\u06cc\u062f <code>aws s3 ls bucket-name<\/code>\u060c \u0627\u06cc\u0646 \u0686\u06cc\u0632\u06cc \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0648\u0627\u0642\u0639 \u0627\u062a\u0641\u0627\u0642 \u0645\u06cc \u0627\u0641\u062a\u062f:<\/p>\n<ol>\n<li>\n<strong>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u062a\u0635\u0627\u0644<\/strong>: AWS CLI \u062a\u0648\u0646\u0644 https \u0631\u0627 \u0628\u0647 <code>s3.us-east-1.amazonaws.com<\/code>\n<\/li>\n<li>\n<strong>ListObjectsv2 \u062a\u0645\u0627\u0633 API<\/strong>: \u0628\u0627 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627\u06cc \u062e\u0627\u0635 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f<\/li>\n<li>\n<strong>\u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a<\/strong>: \u0627\u0632 AWS Signature \u0646\u0633\u062e\u0647 4 \u0628\u0627 \u0627\u0639\u062a\u0628\u0627\u0631 \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<\/ol>\n<p>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0648\u0627\u0642\u0639\u06cc \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"9\">\n<pre class=\"highlight plaintext\"><code>GET \/bucket-name?list-type=2&amp;prefix=&amp;delimiter=%2F&amp;encoding-type=url\nHost: s3.us-east-1.amazonaws.com\nAuthorization: AWS4-HMAC-SHA256 Credential=...\nX-Amz-Date: 20250513T184908Z\nX-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0646\u0645\u0648\u0646\u0647<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"13\">\n<pre class=\"highlight shell\"><code>.\/httpmon aws s3 <span class=\"nb\">ls <\/span>mybucket1\nStarting MITM proxy on :8080\nCA certificate written to: \/tmp\/httpmon-ca.crt\n\nRunning: aws s3 <span class=\"nb\">ls <\/span>mybucket1\n<span class=\"o\">============================================================<\/span>\n\n<span class=\"o\">===<\/span> CONNECT s3.us-east-1.amazonaws.com:443 <span class=\"o\">===<\/span>\n\n\n<span class=\"o\">===<\/span> REQUEST <span class=\"c\">#1 ===<\/span>\nTime: 15:06:42\nGET https:\/\/s3.us-east-1.amazonaws.com:443\/mybucket1?list-type<span class=\"o\">=<\/span>2&amp;prefix<span class=\"o\">=<\/span>&amp;delimiter<span class=\"o\">=<\/span>%2F&amp;encoding-type<span class=\"o\">=<\/span>url HTTP\/1.1\nHost: s3.us-east-1.amazonaws.com\nS3 Bucket: mybucket1\n\nQuery Parameters:\n  delimiter: \/\n  encoding-type: url\n  list-type: 2\n  prefix: \n\nHeaders:\n  Accept-Encoding: identity\n  User-Agent: aws-cli\/2.9.14 Python\/3.9.11 Darwin\/24.5.0 exe\/x86_64 prompt\/off <span class=\"nb\">command<\/span>\/s3.ls\n  X-Amz-Date: 20250513T190642Z\n  X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\n  Authorization: AWS4-HMAC-SHA256 <span class=\"nv\">Credential<\/span><span class=\"o\">=<\/span>XADSFDSFGDSPZRJWH\/20250513\/us-east-1\/s3\/aws4_request, <span class=\"nv\">SignedHeaders<\/span><span class=\"o\">=<\/span>host<span class=\"p\">;<\/span>x-amz-content-sha256<span class=\"p\">;<\/span>x-amz-date, <span class=\"nv\">Signature<\/span><span class=\"o\">=<\/span>0cfd83a5c8dc7b2fe56de3408d23f65ba81a1ad106fd620b6425a7e21c283a7d\n\n\n<span class=\"o\">===<\/span> RESPONSE <span class=\"o\">===<\/span>\nHTTP\/1.1 200 OK\n\nHeaders:\n  X-Amz-Id-2: w48pC+YLNpgK3Lv9nVP3KDzneks+XXdcwLzQW6SEinz3ggPJCvs7SPdgXV5cfDx9QPGjzUvVfO8<span class=\"o\">=<\/span>\n  X-Amz-Request-Id: CX6A2DCCY1701S6Q\n  Date: Tue, 13 May 2025 19:06:43 GMT\n  X-Amz-Bucket-Region: us-east-1\n  Content-Type: application\/xml\n  Server: AmazonS3\n\nBody:\n<?xml <span class=\"nv\"???>version<span class=\"o\">=<\/span><span class=\"s2\">\"1.0\"<\/span> <span class=\"nv\">encoding<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"UTF-8\"<\/span>?&gt;\n<listbucketresult class=\"nv\">xmlns<span class=\"o\">=<\/span><span class=\"s2\">\"http:\/\/s3.amazonaws.com\/doc\/2006-03-01\/\"<\/span><span class=\"o\">&gt;<\/span><name>mybucket1<\/name><prefix\/><keycount>3<\/keycount><maxkeys>1000<\/maxkeys><delimiter>\/<\/delimiter><encodingtype>url<\/encodingtype><istruncated>false<\/istruncated><contents><key>index.html<\/key><lastmodified>2022-12-23T00:36:07.000Z<\/lastmodified><etag>&amp;quot<span class=\"p\">;<\/span>5e88427e5bf9dc71b4e1a947ef1c70b3&amp;quot<span class=\"p\">;<\/span><\/etag><size>30<\/size><storageclass>STANDARD<\/storageclass><\/contents><commonprefixes><prefix>assetes\/<\/prefix><\/commonprefixes><commonprefixes><prefix>images\/<\/prefix><\/commonprefixes><\/listbucketresult>\n\n<span class=\"nt\">------------------------------------------------------------<\/span>\n                           PRE assetes\/\n                           PRE images\/\n2022-12-22 19:36:07         30 index.html\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0646\u06a9\u0627\u062a \u06a9\u0644\u06cc\u062f\u06cc:<\/p>\n<ul>\n<li>\u0646\u0627\u0645 \u0633\u0637\u0644 \u062f\u0631 \u0645\u0633\u06cc\u0631 URL \u0627\u0633\u062a \u060c \u0646\u0647 \u0646\u0627\u0645 \u0645\u06cc\u0632\u0628\u0627\u0646<\/li>\n<li>\n<code>list-type=2<\/code>  API ListObjectSV2 \u0631\u0627 \u0645\u0634\u062e\u0635 \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<li>\n<code>delimiter=\/<\/code>  \u0646\u062a\u0627\u06cc\u062c \u06af\u0631\u0648\u0647 \u0647\u0627 \u062a\u0648\u0633\u0637 &#8220;\u067e\u0648\u0634\u0647 \u0647\u0627&#8221;<\/li>\n<li>\u062f\u0631 <code>X-Amz-Content-Sha256<\/code> \u0647\u062f\u0631 \u062d\u0627\u0648\u06cc \u0647\u0634 \u0627\u0632 \u0628\u062f\u0646\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a (\u062e\u0627\u0644\u06cc) \u0627\u0633\u062a<\/li>\n<li>\u0639\u0646\u0648\u0627\u0646 \u0645\u062c\u0648\u0632 \u0634\u0627\u0645\u0644 \u0627\u0645\u0636\u0627\u06cc AWS \u0627\u0633\u062a<\/li>\n<\/ul>\n<p>\u067e\u0627\u0633\u062e XML \u062d\u0627\u0648\u06cc \u0645\u062d\u062a\u0648\u0627\u06cc \u0633\u0637\u0644 \u0627\u0633\u062a \u060c \u06a9\u0647 AWS CLI \u0633\u067e\u0633 \u062f\u0631 \u0644\u06cc\u0633\u062a \u0622\u0634\u0646\u0627 \u0641\u0631\u0645\u062a \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0646\u0645\u0648\u0646\u0647 \u0641\u0631\u0641\u0631\u06cc<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"17\">\n<pre class=\"highlight shell\"><code>.\/httpmon curl https:\/\/api.x.com\/2\/users                                             \nStarting MITM proxy on :8080\nCA certificate written to: \/tmp\/httpmon-ca.crt\n\nRunning: curl <span class=\"nt\">-x<\/span> http:\/\/localhost:8080 <span class=\"nt\">--cacert<\/span> \/tmp\/httpmon-ca.crt https:\/\/api.x.com\/2\/users\n<span class=\"o\">============================================================<\/span>\n\n<span class=\"o\">===<\/span> CONNECT api.x.com:443 <span class=\"o\">===<\/span>\n\n\n<span class=\"o\">===<\/span> REQUEST <span class=\"c\">#1 ===<\/span>\nTime: 15:30:11\nGET https:\/\/api.x.com:443\/2\/users HTTP\/1.1\nHost: api.x.com\n\nHeaders:\n  User-Agent: curl\/8.7.1\n  Accept: <span class=\"k\">*<\/span>\/<span class=\"k\">*<\/span>\n\n\n<span class=\"o\">===<\/span> RESPONSE <span class=\"o\">===<\/span>\nHTTP\/1.1 401 Unauthorized\n\nHeaders:\n  Content-Length: 99\n  X-Response-Time: 1\n  X-Connection-Hash: 2880da004170bfc7797bc51e1d8b94bb27fb00798f03346f480dd37d4a260c41\n  Set-Cookie: <span class=\"nv\">__cf_bm<\/span><span class=\"o\">=<\/span>kdW6u1gST38Rz8j76Ic.oYGItlWU_3neZwgf8ucpTrU-1747164611-1.0.1.1-k1eAKakMJcMnzW3byJJ9olylAnQXVZv5IfQTvHjmXRnwqsKBcEMr6bcv1cdSoBIW_kgsJrthIaWS5JG_SPPyFBnFYLj.BHQUo9kQA3WOmHU<span class=\"p\">;<\/span> <span class=\"nv\">path<\/span><span class=\"o\">=<\/span>\/<span class=\"p\">;<\/span> <span class=\"nv\">expires<\/span><span class=\"o\">=<\/span>Tue, 13-May-25 20:00:11 GMT<span class=\"p\">;<\/span> <span class=\"nv\">domain<\/span><span class=\"o\">=<\/span>.x.com<span class=\"p\">;<\/span> HttpOnly<span class=\"p\">;<\/span> Secure<span class=\"p\">;<\/span> <span class=\"nv\">SameSite<\/span><span class=\"o\">=<\/span>None\n  Date: Tue, 13 May 2025 19:30:11 GMT\n  Perf: 7402827104\n  X-Transaction-Id: 8bc4130c588fa097\n  Server: cloudflare tsa_b\n  Content-Type: application\/problem+json\n  Strict-Transport-Security: max-age<span class=\"o\">=<\/span>631138519\n  Cf-Cache-Status: DYNAMIC\n  Connection: keep-alive\n  Cache-Control: no-cache, no-store, max-age<span class=\"o\">=<\/span>0\n  Cf-Ray: 93f491a3bdbfa223-YYZ\n\nBody:\n<span class=\"o\">{<\/span>\n  <span class=\"s2\">\"title\"<\/span>: <span class=\"s2\">\"Unauthorized\"<\/span>,\n  <span class=\"s2\">\"type\"<\/span>: <span class=\"s2\">\"about:blank\"<\/span>,\n  <span class=\"s2\">\"status\"<\/span>: 401,\n  <span class=\"s2\">\"detail\"<\/span>: <span class=\"s2\">\"Unauthorized\"<\/span>\n<span class=\"o\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%DA%A9%D9%85%DB%8C_%D8%A8%DB%8C%D8%B4%D8%AA%D8%B1\"><\/span>\n<p>  \u06a9\u0645\u06cc \u0628\u06cc\u0634\u062a\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0644\u0645\u0633 \u0647\u0627\u06cc \u0646\u0647\u0627\u06cc\u06cc \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0627\u0628\u0632\u0627\u0631 \u0645\u0627 \u0628\u0647\u062a\u0631 \u0634\u0648\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"77\">\n<pre class=\"highlight go\"><code><span class=\"k\">var<\/span> <span class=\"p\">(<\/span>\n    <span class=\"n\">requestCounter<\/span> <span class=\"kt\">int<\/span>\n    <span class=\"n\">mutex<\/span>          <span class=\"n\">sync<\/span><span class=\"o\">.<\/span><span class=\"n\">Mutex<\/span>\n    <span class=\"n\">certCache<\/span>      <span class=\"o\">=<\/span> <span class=\"nb\">make<\/span><span class=\"p\">(<\/span><span class=\"k\">map<\/span><span class=\"p\">[<\/span><span class=\"kt\">string<\/span><span class=\"p\">]<\/span><span class=\"o\">*<\/span><span class=\"n\">tls<\/span><span class=\"o\">.<\/span><span class=\"n\">Certificate<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">certMutex<\/span>      <span class=\"n\">sync<\/span><span class=\"o\">.<\/span><span class=\"n\">Mutex<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"k\">func<\/span> <span class=\"n\">logRequest<\/span><span class=\"p\">(<\/span><span class=\"n\">req<\/span> <span class=\"o\">*<\/span><span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Request<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">mutex<\/span><span class=\"o\">.<\/span><span class=\"n\">Lock<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">requestCounter<\/span><span class=\"o\">++<\/span>\n    <span class=\"n\">reqID<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">requestCounter<\/span>\n    <span class=\"n\">mutex<\/span><span class=\"o\">.<\/span><span class=\"n\">Unlock<\/span><span class=\"p\">()<\/span>\n\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"err\">\\0<\/span><span class=\"s\">33[36m=== REQUEST #%d ===<\/span><span class=\"err\">\\0<\/span><span class=\"s\">33[0m<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">reqID<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Time: %s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Now<\/span><span class=\"p\">()<\/span><span class=\"o\">.<\/span><span class=\"n\">Format<\/span><span class=\"p\">(<\/span><span class=\"s\">\"15:04:05\"<\/span><span class=\"p\">))<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"%s %s %s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">Method<\/span><span class=\"p\">,<\/span> <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">URL<\/span><span class=\"o\">.<\/span><span class=\"n\">String<\/span><span class=\"p\">(),<\/span> <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">Proto<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Host: %s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">Host<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"k\">if<\/span> <span class=\"n\">strings<\/span><span class=\"o\">.<\/span><span class=\"n\">Contains<\/span><span class=\"p\">(<\/span><span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">Host<\/span><span class=\"p\">,<\/span> <span class=\"s\">\".amazonaws.com\"<\/span><span class=\"p\">)<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"n\">strings<\/span><span class=\"o\">.<\/span><span class=\"n\">Contains<\/span><span class=\"p\">(<\/span><span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">URL<\/span><span class=\"o\">.<\/span><span class=\"n\">Path<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"https:\/\/dev.to\/\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">pathParts<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">strings<\/span><span class=\"o\">.<\/span><span class=\"n\">SplitN<\/span><span class=\"p\">(<\/span><span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">URL<\/span><span class=\"o\">.<\/span><span class=\"n\">Path<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"https:\/\/dev.to\/\"<\/span><span class=\"p\">,<\/span> <span class=\"m\">3<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">pathParts<\/span><span class=\"p\">)<\/span> <span class=\"o\">&gt;=<\/span> <span class=\"m\">2<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"n\">pathParts<\/span><span class=\"p\">[<\/span><span class=\"m\">1<\/span><span class=\"p\">]<\/span> <span class=\"o\">!=<\/span> <span class=\"s\">\"\"<\/span> <span class=\"p\">{<\/span>\n            <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"err\">\\0<\/span><span class=\"s\">33[93mS3 Bucket: %s<\/span><span class=\"err\">\\0<\/span><span class=\"s\">33[0m<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">pathParts<\/span><span class=\"p\">[<\/span><span class=\"m\">1<\/span><span class=\"p\">])<\/span>\n            <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">pathParts<\/span><span class=\"p\">)<\/span> <span class=\"o\">&gt;<\/span> <span class=\"m\">2<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"n\">pathParts<\/span><span class=\"p\">[<\/span><span class=\"m\">2<\/span><span class=\"p\">]<\/span> <span class=\"o\">!=<\/span> <span class=\"s\">\"\"<\/span> <span class=\"p\">{<\/span>\n                <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"err\">\\0<\/span><span class=\"s\">33[93mS3 Key\/Prefix: %s<\/span><span class=\"err\">\\0<\/span><span class=\"s\">33[0m<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">pathParts<\/span><span class=\"p\">[<\/span><span class=\"m\">2<\/span><span class=\"p\">])<\/span>\n            <span class=\"p\">}<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">if<\/span> <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">URL<\/span><span class=\"o\">.<\/span><span class=\"n\">RawQuery<\/span> <span class=\"o\">!=<\/span> <span class=\"s\">\"\"<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">Query Parameters:\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">params<\/span><span class=\"p\">,<\/span> <span class=\"n\">_<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">url<\/span><span class=\"o\">.<\/span><span class=\"n\">ParseQuery<\/span><span class=\"p\">(<\/span><span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">URL<\/span><span class=\"o\">.<\/span><span class=\"n\">RawQuery<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">for<\/span> <span class=\"n\">k<\/span><span class=\"p\">,<\/span> <span class=\"n\">v<\/span> <span class=\"o\">:=<\/span> <span class=\"k\">range<\/span> <span class=\"n\">params<\/span> <span class=\"p\">{<\/span>\n            <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"  %s: %s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">k<\/span><span class=\"p\">,<\/span> <span class=\"n\">strings<\/span><span class=\"o\">.<\/span><span class=\"n\">Join<\/span><span class=\"p\">(<\/span><span class=\"n\">v<\/span><span class=\"p\">,<\/span> <span class=\"s\">\", \"<\/span><span class=\"p\">))<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">Headers:\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">for<\/span> <span class=\"n\">k<\/span><span class=\"p\">,<\/span> <span class=\"n\">v<\/span> <span class=\"o\">:=<\/span> <span class=\"k\">range<\/span> <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">Header<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"  %s: %s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">k<\/span><span class=\"p\">,<\/span> <span class=\"n\">strings<\/span><span class=\"o\">.<\/span><span class=\"n\">Join<\/span><span class=\"p\">(<\/span><span class=\"n\">v<\/span><span class=\"p\">,<\/span> <span class=\"s\">\", \"<\/span><span class=\"p\">))<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">if<\/span> <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">Body<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">body<\/span><span class=\"p\">,<\/span> <span class=\"n\">_<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">io<\/span><span class=\"o\">.<\/span><span class=\"n\">ReadAll<\/span><span class=\"p\">(<\/span><span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">Body<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">req<\/span><span class=\"o\">.<\/span><span class=\"n\">Body<\/span> <span class=\"o\">=<\/span> <span class=\"n\">io<\/span><span class=\"o\">.<\/span><span class=\"n\">NopCloser<\/span><span class=\"p\">(<\/span><span class=\"n\">bytes<\/span><span class=\"o\">.<\/span><span class=\"n\">NewReader<\/span><span class=\"p\">(<\/span><span class=\"n\">body<\/span><span class=\"p\">))<\/span>\n        <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">body<\/span><span class=\"p\">)<\/span> <span class=\"o\">&gt;<\/span> <span class=\"m\">0<\/span> <span class=\"p\">{<\/span>\n            <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">Body:<\/span><span class=\"se\">\\n<\/span><span class=\"s\">%s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"kt\">string<\/span><span class=\"p\">(<\/span><span class=\"n\">body<\/span><span class=\"p\">))<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">()<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">func<\/span> <span class=\"n\">logResponse<\/span><span class=\"p\">(<\/span><span class=\"n\">resp<\/span> <span class=\"o\">*<\/span><span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Response<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"err\">\\0<\/span><span class=\"s\">33[32m=== RESPONSE ===<\/span><span class=\"err\">\\0<\/span><span class=\"s\">33[0m<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"%s %s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">resp<\/span><span class=\"o\">.<\/span><span class=\"n\">Proto<\/span><span class=\"p\">,<\/span> <span class=\"n\">resp<\/span><span class=\"o\">.<\/span><span class=\"n\">Status<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">Headers:\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">for<\/span> <span class=\"n\">k<\/span><span class=\"p\">,<\/span> <span class=\"n\">v<\/span> <span class=\"o\">:=<\/span> <span class=\"k\">range<\/span> <span class=\"n\">resp<\/span><span class=\"o\">.<\/span><span class=\"n\">Header<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"  %s: %s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">k<\/span><span class=\"p\">,<\/span> <span class=\"n\">strings<\/span><span class=\"o\">.<\/span><span class=\"n\">Join<\/span><span class=\"p\">(<\/span><span class=\"n\">v<\/span><span class=\"p\">,<\/span> <span class=\"s\">\", \"<\/span><span class=\"p\">))<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">if<\/span> <span class=\"n\">resp<\/span><span class=\"o\">.<\/span><span class=\"n\">Body<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">body<\/span><span class=\"p\">,<\/span> <span class=\"n\">_<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">io<\/span><span class=\"o\">.<\/span><span class=\"n\">ReadAll<\/span><span class=\"p\">(<\/span><span class=\"n\">resp<\/span><span class=\"o\">.<\/span><span class=\"n\">Body<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">resp<\/span><span class=\"o\">.<\/span><span class=\"n\">Body<\/span> <span class=\"o\">=<\/span> <span class=\"n\">io<\/span><span class=\"o\">.<\/span><span class=\"n\">NopCloser<\/span><span class=\"p\">(<\/span><span class=\"n\">bytes<\/span><span class=\"o\">.<\/span><span class=\"n\">NewReader<\/span><span class=\"p\">(<\/span><span class=\"n\">body<\/span><span class=\"p\">))<\/span>\n        <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">body<\/span><span class=\"p\">)<\/span> <span class=\"o\">&gt;<\/span> <span class=\"m\">0<\/span> <span class=\"p\">{<\/span>\n            <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">Body:<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">)<\/span>\n            <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">body<\/span><span class=\"p\">)<\/span> <span class=\"o\">&gt;<\/span> <span class=\"m\">1000<\/span> <span class=\"p\">{<\/span>\n                <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"%s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">[... %d more bytes ...]<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"kt\">string<\/span><span class=\"p\">(<\/span><span class=\"n\">body<\/span><span class=\"p\">[<\/span><span class=\"o\">:<\/span><span class=\"m\">1000<\/span><span class=\"p\">]),<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">body<\/span><span class=\"p\">)<\/span><span class=\"o\">-<\/span><span class=\"m\">1000<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n                <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"%s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"kt\">string<\/span><span class=\"p\">(<\/span><span class=\"n\">body<\/span><span class=\"p\">))<\/span>\n            <span class=\"p\">}<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">strings<\/span><span class=\"o\">.<\/span><span class=\"n\">Repeat<\/span><span class=\"p\">(<\/span><span class=\"s\">\"-\"<\/span><span class=\"p\">,<\/span> <span class=\"m\">60<\/span><span class=\"p\">))<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">func<\/span> <span class=\"n\">generateCert<\/span><span class=\"p\">(<\/span><span class=\"n\">host<\/span> <span class=\"kt\">string<\/span><span class=\"p\">)<\/span> <span class=\"p\">(<\/span><span class=\"o\">*<\/span><span class=\"n\">tls<\/span><span class=\"o\">.<\/span><span class=\"n\">Certificate<\/span><span class=\"p\">,<\/span> <span class=\"kt\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">certMutex<\/span><span class=\"o\">.<\/span><span class=\"n\">Lock<\/span><span class=\"p\">()<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">cert<\/span><span class=\"p\">,<\/span> <span class=\"n\">ok<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">certCache<\/span><span class=\"p\">[<\/span><span class=\"n\">host<\/span><span class=\"p\">];<\/span> <span class=\"n\">ok<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">certMutex<\/span><span class=\"o\">.<\/span><span class=\"n\">Unlock<\/span><span class=\"p\">()<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">cert<\/span><span class=\"p\">,<\/span> <span class=\"no\">nil<\/span>\n    <span class=\"p\">}<\/span>\n    <span class=\"n\">certMutex<\/span><span class=\"o\">.<\/span><span class=\"n\">Unlock<\/span><span class=\"p\">()<\/span>\n\n    <span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">rsa<\/span><span class=\"o\">.<\/span><span class=\"n\">GenerateKey<\/span><span class=\"p\">(<\/span><span class=\"n\">rand<\/span><span class=\"o\">.<\/span><span class=\"n\">Reader<\/span><span class=\"p\">,<\/span> <span class=\"m\">2048<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"no\">nil<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">template<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">Certificate<\/span><span class=\"p\">{<\/span>\n        <span class=\"n\">SerialNumber<\/span><span class=\"o\">:<\/span> <span class=\"n\">big<\/span><span class=\"o\">.<\/span><span class=\"n\">NewInt<\/span><span class=\"p\">(<\/span><span class=\"m\">1<\/span><span class=\"p\">),<\/span>\n        <span class=\"n\">Subject<\/span><span class=\"o\">:<\/span> <span class=\"n\">pkix<\/span><span class=\"o\">.<\/span><span class=\"n\">Name<\/span><span class=\"p\">{<\/span>\n            <span class=\"n\">Organization<\/span><span class=\"o\">:<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">string<\/span><span class=\"p\">{<\/span><span class=\"s\">\"HTTP Monitor\"<\/span><span class=\"p\">},<\/span>\n        <span class=\"p\">},<\/span>\n        <span class=\"n\">NotBefore<\/span><span class=\"o\">:<\/span>    <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Now<\/span><span class=\"p\">(),<\/span>\n        <span class=\"n\">NotAfter<\/span><span class=\"o\">:<\/span>     <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Now<\/span><span class=\"p\">()<\/span><span class=\"o\">.<\/span><span class=\"n\">AddDate<\/span><span class=\"p\">(<\/span><span class=\"m\">1<\/span><span class=\"p\">,<\/span> <span class=\"m\">0<\/span><span class=\"p\">,<\/span> <span class=\"m\">0<\/span><span class=\"p\">),<\/span>\n        <span class=\"n\">KeyUsage<\/span><span class=\"o\">:<\/span>     <span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">KeyUsageKeyEncipherment<\/span> <span class=\"o\">|<\/span> <span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">KeyUsageDigitalSignature<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">ExtKeyUsage<\/span><span class=\"o\">:<\/span>  <span class=\"p\">[]<\/span><span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">ExtKeyUsage<\/span><span class=\"p\">{<\/span><span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">ExtKeyUsageServerAuth<\/span><span class=\"p\">},<\/span>\n        <span class=\"n\">DNSNames<\/span><span class=\"o\">:<\/span>     <span class=\"p\">[]<\/span><span class=\"kt\">string<\/span><span class=\"p\">{<\/span><span class=\"n\">host<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"*.\"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">host<\/span><span class=\"p\">},<\/span>\n        <span class=\"n\">IPAddresses<\/span><span class=\"o\">:<\/span>  <span class=\"p\">[]<\/span><span class=\"n\">net<\/span><span class=\"o\">.<\/span><span class=\"n\">IP<\/span><span class=\"p\">{<\/span><span class=\"n\">net<\/span><span class=\"o\">.<\/span><span class=\"n\">IPv4<\/span><span class=\"p\">(<\/span><span class=\"m\">127<\/span><span class=\"p\">,<\/span> <span class=\"m\">0<\/span><span class=\"p\">,<\/span> <span class=\"m\">0<\/span><span class=\"p\">,<\/span> <span class=\"m\">1<\/span><span class=\"p\">)},<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">certDER<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">x509<\/span><span class=\"o\">.<\/span><span class=\"n\">CreateCertificate<\/span><span class=\"p\">(<\/span><span class=\"n\">rand<\/span><span class=\"o\">.<\/span><span class=\"n\">Reader<\/span><span class=\"p\">,<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">template<\/span><span class=\"p\">,<\/span> <span class=\"n\">caCert<\/span><span class=\"p\">,<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">key<\/span><span class=\"o\">.<\/span><span class=\"n\">PublicKey<\/span><span class=\"p\">,<\/span> <span class=\"n\">caKey<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"no\">nil<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">cert<\/span> <span class=\"o\">:=<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">tls<\/span><span class=\"o\">.<\/span><span class=\"n\">Certificate<\/span><span class=\"p\">{<\/span>\n        <span class=\"n\">Certificate<\/span><span class=\"o\">:<\/span> <span class=\"p\">[][]<\/span><span class=\"kt\">byte<\/span><span class=\"p\">{<\/span><span class=\"n\">certDER<\/span><span class=\"p\">},<\/span>\n        <span class=\"n\">PrivateKey<\/span><span class=\"o\">:<\/span>  <span class=\"n\">key<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">certMutex<\/span><span class=\"o\">.<\/span><span class=\"n\">Lock<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">certCache<\/span><span class=\"p\">[<\/span><span class=\"n\">host<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"n\">cert<\/span>\n    <span class=\"n\">certMutex<\/span><span class=\"o\">.<\/span><span class=\"n\">Unlock<\/span><span class=\"p\">()<\/span>\n\n    <span class=\"k\">return<\/span> <span class=\"n\">cert<\/span><span class=\"p\">,<\/span> <span class=\"no\">nil<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0627 \u06cc\u06a9 \u0631\u0647\u06af\u06cc\u0631 \u0642\u062f\u0631\u062a\u0645\u0646\u062f HTTP\/HTTPS \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645 \u06a9\u0647:<\/p>\n<ul>\n<li>\u0647\u0645\u0647 \u062a\u0631\u0627\u0641\u06cc\u06a9 HTTP \u0631\u0627 \u0628\u0647 \u0637\u0648\u0631 \u0634\u0641\u0627\u0641 \u0636\u0628\u0637 \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<li>\u062a\u0631\u0627\u0641\u06cc\u06a9 HTTPS \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u06a9\u0646\u06cc\u06a9 \u0647\u0627\u06cc MITM \u0631\u0645\u0632\u06af\u0634\u0627\u06cc\u06cc \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<li>\u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0628\u0627 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u062e\u0637 \u0641\u0631\u0645\u0627\u0646 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<li>\u062e\u0631\u0648\u062c\u06cc \u062f\u0642\u06cc\u0642 \u0648 \u0641\u0631\u0645\u062a \u0634\u062f\u0647 \u0628\u0631\u0627\u06cc \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f<\/li>\n<\/ul>\n<p>\u0627\u06cc\u0646 \u0627\u0628\u0632\u0627\u0631 \u0628\u0631\u0627\u06cc \u062f\u0631\u06a9 \u062a\u0639\u0627\u0645\u0644 API \u060c \u0645\u0648\u0636\u0648\u0639\u0627\u062a \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u0648 \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0646\u062d\u0648\u0647 \u0628\u0631\u0642\u0631\u0627\u0631\u06cc \u0627\u0631\u062a\u0628\u0627\u0637 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0627\u0632 \u0637\u0631\u06cc\u0642 HTTP \u0628\u0633\u06cc\u0627\u0631 \u0627\u0631\u0632\u0634\u0645\u0646\u062f \u0627\u0633\u062a. \u06a9\u062f \u0645\u0646\u0628\u0639 \u06a9\u0627\u0645\u0644 \u062a\u0648\u0627\u0646\u0627\u06cc\u06cc \u0647\u0627\u06cc \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0634\u0628\u06a9\u0647 GO \u0648 \u0646\u062d\u0648\u0647 \u0633\u0627\u062e\u062a \u0633\u0631\u0648\u0631\u0647\u0627\u06cc \u067e\u0631\u0627\u06a9\u0633\u06cc \u067e\u06cc\u0634\u0631\u0641\u062a\u0647 \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>\u0628\u0647 \u06cc\u0627\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u067e\u0630\u06cc\u0631\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f &#8211; \u0641\u0642\u0637 \u062a\u0631\u0627\u0641\u06cc\u06a9 \u0631\u0627 \u062f\u0631 \u062f\u0633\u062a\u06af\u0627\u0647 \u062e\u0648\u062f \u0628\u0631\u0627\u06cc \u0627\u0647\u062f\u0627\u0641 \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u0631\u0647\u06af\u06cc\u0631\u06cc \u06a9\u0646\u06cc\u062f. \u0647\u0631\u06af\u0632 \u0627\u0632 \u062a\u06a9\u0646\u06cc\u06a9 \u0647\u0627\u06cc MITM \u062f\u0631 \u0634\u0628\u06a9\u0647 \u0647\u0627 \u06cc\u0627 \u0633\u06cc\u0633\u062a\u0645\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 \u0622\u0646\u0647\u0627 \u0646\u06cc\u0633\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u062c\u0631\u0627\u06cc \u06a9\u0627\u0645\u0644 \u06a9\u0627\u0631 \u0627\u06cc\u0646 \u0631\u0647\u06af\u06cc\u0631\u06cc http\/https \u0631\u0627 \u062f\u0631 https:\/\/github.com\/rezmoss\/https-traffic-inspector \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u062f<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0622\u06cc\u0627 \u062a\u0627 \u0628\u0647 \u062d\u0627\u0644 \u0641\u06a9\u0631 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u06a9\u0647 HTTP \u062f\u0631 \u0648\u0627\u0642\u0639 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u062e\u0637 \u0641\u0631\u0645\u0627\u0646 \u0634\u0645\u0627 \u0686\u0647 \u0686\u06cc\u0632\u06cc \u0631\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc \u06a9\u0646\u062f\u061f \u0648\u0642\u062a\u06cc \u062f\u0648\u06cc\u062f\u06cc\u062f aws s3 ls \u06cc\u0627 curl https:\/\/api.example.com\u060c \u0648\u0627\u0642\u0639\u0627\u064b \u0632\u06cc\u0631 \u06a9\u0627\u067e\u0648\u062a \u0686\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0645\u06cc \u0627\u0641\u062a\u062f\u061f \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u060c \u0627\u0628\u0632\u0627\u0631\u06cc \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f \u06a9\u0647 \u062a\u0645\u0627\u0645 \u062a\u0631\u0627\u0641\u06cc\u06a9 HTTP \u0648 HTTPS \u0631\u0627 \u0628\u0627 \u0627\u06cc\u062c\u0627\u062f \u067e\u0631\u0648\u06a9\u0633\u06cc &hellip;<\/p>\n","protected":false},"author":2,"featured_media":108875,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-108874","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/108874","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=108874"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/108874\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/108875"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=108874"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=108874"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=108874"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}