{"id":208288,"date":"2025-07-08T17:33:27","date_gmt":"2025-07-08T09:33:27","guid":{"rendered":"https:\/\/server.hk\/cnblog\/208288\/"},"modified":"2025-07-08T17:33:27","modified_gmt":"2025-07-08T09:33:27","slug":"curl-%e5%92%8c-golang-%e4%b8%ad%e7%9a%84%e4%b8%8d%e5%90%8c%e8%af%b7%e6%b1%82%e7%8a%b6%e6%80%81%ef%bc%88200-%e5%92%8c-403%ef%bc%89","status":"publish","type":"post","link":"https:\/\/server.hk\/cnblog\/208288\/","title":{"rendered":"Curl \u548c Golang \u4e2d\u7684\u4e0d\u540c\u8bf7\u6c42\u72b6\u6001\uff08200 \u548c 403\uff09"},"content":{"rendered":"<p><b><\/b> <\/p>\n<p>\u5f53\u524d\u4f4d\u7f6e\uff1a <span>&gt;<\/span> <span>&gt;<\/span> <span>&gt;<\/span> <span>&gt;<\/span> <span>Curl \u548c Golang \u4e2d\u7684\u4e0d\u540c\u8bf7\u6c42\u72b6\u6001\uff08200 \u548c 403\uff09<\/span><\/p>\n<p><span>\u6765\u6e90\uff1astackoverflow<\/span><br \/>\n<span>2024-05-01 12:24:38<\/span><br \/>\n<span><i><\/i>0\u6d4f\u89c8<\/span><br \/>\n<span style=\"cursor: pointer\"><i><\/i>\u6536\u85cf<\/span> <\/p>\n<p>\u600e\u4e48\u5165\u95e8Golang\u7f16\u7a0b\uff1f\u9700\u8981\u5b66\u4e60\u54ea\u4e9b\u77e5\u8bc6\u70b9\uff1f\u8fd9\u662f\u65b0\u624b\u4eec\u521a\u63a5\u89e6\u7f16\u7a0b\u65f6\u5e38\u89c1\u7684\u95ee\u9898\uff1b\u4e0b\u9762\u5c31\u6765\u7ed9\u5927\u5bb6\u6574\u7406\u5206\u4eab\u4e00\u4e9b\u77e5\u8bc6\u70b9\uff0c\u5e0c\u671b\u80fd\u591f\u7ed9\u521d\u5b66\u8005\u4e00\u4e9b\u5e2e\u52a9\u3002\u672c\u7bc7\u6587\u7ae0\u5c31\u6765\u4ecb\u7ecd\u300aCurl \u548c Golang \u4e2d\u7684\u4e0d\u540c\u8bf7\u6c42\u72b6\u6001\uff08200 \u548c 403\uff09\u300b\uff0c\u6d89\u53ca\u5230\uff0c\u6709\u9700\u8981\u7684\u53ef\u4ee5\u6536\u85cf\u4e00\u4e0b<\/p>\n<p> \u95ee\u9898\u5185\u5bb9<br \/>\n <\/p>\n<p>\u6211\u5728\u672c\u5730 macbook air \u4e0a\u4f7f\u7528\u6807\u51c6 golang http \u5e93\u4ece\u7f51\u7ad9 (https:\/\/avito.ru) \u83b7\u53d6\u6570\u636e\u65f6\u9047\u5230\u95ee\u9898 &#8211; \u6211\u6536\u5230\u72b6\u6001 403 forbidden\u3002\u4ece\u6d4f\u89c8\u5668\u6253\u5f00\u8be5\u7f51\u7ad9\uff08\u7981\u7528 javascript\uff09\u6ca1\u6709\u95ee\u9898\uff0c\u5e76\u4e14\u4f7f\u7528\u6807\u51c6 curl \u51fd\u6570\uff08curl -v https:\/\/www.avito.ru\/moscow\uff09\u83b7\u53d6\u6570\u636e\u4e5f\u6ca1\u6709\u95ee\u9898 &#8211; \u83b7\u5f97\u72b6\u6001 200 \u6240\u6709\u65f6\u95f4\u3002<\/p>\n<p>\u6709\u4e00\u4e2agolang\u4ee3\u7801\uff1a<\/p>\n<pre>package main\n\nimport (\n    \"crypto\/tls\"\n    \"crypto\/x509\"\n    \"flag\"\n    \"fmt\"\n    \"io\/ioutil\"\n    \"net\/http\/httputil\"\n    \"time\u201d\n    \"database\/sql\"\n    \"log\"\n    \"net\/http\"\n\n    \"golang.org\/x\/net\/http2\u201d\n    \"github.com\/puerkitobio\/goquery\"\n)\n\n\nfunc main() {\n\n    request, err := http.newrequest(\"get\", \"https:\/\/www.avito.ru\/moscow\", nil)\n    if err != nil {\n        log.fatal(err)\n    }\n    request.header.set(\"user-agent\", \"mozilla\/5.0 (macintosh; intel mac os x 10_15_6) applewebkit\/537.36 (khtml, like gecko) chrome\/86.0.4240.198 safari\/537.36\")\n    request.header.add(\"accept\", \"text\/html,application\/xhtml+xml,application\/xml;q=0.9,*\/*;q=0.8\")\n    request.header.add(\"accept-language\", \"en-us\")\n    request.header.add(\"connection\", \"keep-alive\")\n    request.header.add(\"host\", \"www.avito.ru\")\n    fmt.println(request.header)\n\n    \/\/ do something with the request\n    client := &amp;http.client{}\n    cacert, err := ioutil.readfile(\"\/etc\/ssl\/cert.pem\")\n    if err != nil {\n        log.fatalf(\"reading server certificate: %s\", err)\n    }\n    cacertpool := x509.newcertpool()\n    cacertpool.appendcertsfrompem(cacert)\n\n    var httpversion = flag.int(\"version\", 2, \"http version\")\n\n    fmt.println(string(*httpversion))\n    client.transport = &amp;http2.transport{\n        tlsclientconfig: &amp;tls.config{\n            rootcas:            cacertpool,\n            \/\/ insecureskipverify: true,\n        },\n    }\n\n    requestdump, err := httputil.dumprequest(request, true)\n    if err != nil {\n        fmt.println(err)\n    }\n    fmt.println(string(requestdump))\n\n    response, err := client.do(request)\n    fmt.println(string(response.proto))\n\n    if err != nil {\n        log.fatal(err)\n    }\n\n    defer response.body.close()\n\n    fmt.println(response.status)\n\n    doc, err := goquery.newdocumentfromreader(response.body)\n    if err != nil {\n        fmt.println(\"here2\")\n        log.fatal(err)\n    }\n    pagetitle := doc.find(\"title\").contents().text()\n\n    fmt.println(pagetitle)\n}<\/pre>\n<p>\u6709\u5370\u5237\u54c1\uff1a<\/p>\n<pre>get \/ http\/1.1\nhost: www.avito.ru\nuser-agent: mozilla\/5.0 (macintosh; intel mac os x 10_15_6) applewebkit\/537.36 (khtml, like gecko) chrome\/86.0.4240.198 safari\/537.36\naccept: text\/html,application\/xhtml+xml,application\/xml;q=0.9,*\/*;q=0.8\naccept-language: en-us\nconnection: keep-alive\naccept-encoding: gzip\n\nhttp\/2.0\nmap[content-type:[text\/html; charset=utf-8] date:[sat, 14 nov 2020 13:14:10 gmt] server:[nginx] x-content-type-options:[nosniff] x-envoy-upstream-service-time:[14] x-xss-protection:[1; mode=block]]\n403 forbidden\nhere3\n\u0414\u043e\u0441\u0442\u0443\u043f \u0441 \u0432\u0430\u0448\u0435\u0433\u043e ip-\u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d \u2014 \u0410\u0432\u0438\u0442\u043e\nhere4\n\u0414\u043e\u0441\u0442\u0443\u043f \u0441 \u0432\u0430\u0448\u0435\u0433\u043e ip-\u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d \u2014 \u0410\u0432\u0438\u0442\u043e<\/pre>\n<p>\u6709 curl -v \u7684\u6253\u5370\uff1a<\/p>\n<pre>Alexanders-MacBook-Air:~ alexchistyakov$ curl -v https:\/\/www.avito.ru\/moscow\n*   Trying 185.89.12.132...\n* TCP_NODELAY set\n* Connected to www.avito.ru (185.89.12.132) port 443 (#0)\n* ALPN, offering h2\n* ALPN, offering http\/1.1\n* successfully set certificate verify locations:\n*   CAfile: \/etc\/ssl\/cert.pem\n  CApath: none\n* TLSv1.2 (OUT), TLS handshake, Client hello (1):\n* TLSv1.2 (IN), TLS handshake, Server hello (2):\n* TLSv1.2 (IN), TLS handshake, Certificate (11):\n* TLSv1.2 (IN), TLS handshake, Server key exchange (12):\n* TLSv1.2 (IN), TLS handshake, Server finished (14):\n* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):\n* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):\n* TLSv1.2 (OUT), TLS handshake, Finished (20):\n* TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):\n* TLSv1.2 (IN), TLS handshake, Finished (20):\n* SSL connection using TLSv1.2 \/ ECDHE-RSA-AES128-GCM-SHA256\n* ALPN, server accepted to use h2\n* Server certificate:\n*  subject: C=RU; ST=Moscow; L=Moscow; O=Limited Liability Company KEH eCommerce; CN=*.avito.ru\n*  start date: Feb  4 09:48:54 2019 GMT\n*  expire date: Feb  4 09:48:54 2021 GMT\n*  subjectAltName: host \"www.avito.ru\" matched cert's \"*.avito.ru\"\n*  issuer: C=BE; O=GlobalSign nv-sa; CN=GlobalSign Organization Validation CA - SHA256 - G2\n*  SSL certificate verify ok.\n* Using HTTP2, server supports multi-use\n* Connection state changed (HTTP\/2 confirmed)\n* Copying HTTP\/2 data in stream buffer to connection buffer after upgrade: len=0\n* Using Stream ID: 1 (easy handle 0x7f7feb00ba00)\n&gt; GET \/moscow HTTP\/2\n&gt; Host: www.avito.ru\n&gt; User-Agent: curl\/7.64.1\n&gt; Accept: *\/*\n&gt; \n* Connection state changed (MAX_CONCURRENT_STREAMS == 128)!\n&lt; HTTP\/2 200 \n&lt; server: nginx\n&lt; date: Sat, 14 Nov 2020 13:28:28 GMT\n&lt; content-type: text\/html; charset=UTF-8\n&lt; set-cookie: u=2ke25u1o.n9oms3.9cgwbvpc4sw0; path=\/; expires=Tue, 10-Nov-37 13:28:28 GMT; HttpOnly; Max-Age=536112000; secure; domain=.avito.ru\n&lt; set-cookie: v=1605360508; path=\/; expires=Sat, 14-Nov-20 13:58:28 GMT; HttpOnly; Max-Age=1800; secure; domain=.avito.ru; SameSite=Lax\n&lt; cache-control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0\n&lt; set-cookie: buyer_location_id=621540; expires=Sun, 14-Nov-2021 13:28:28 GMT; Max-Age=31536000; path=\/; domain=.avito.ru; secure; HttpOnly; SameSite=Lax\n&lt; set-cookie: luri=rossiya; expires=Sun, 15-Nov-2020 13:28:28 GMT; Max-Age=86400; path=\/; domain=.avito.ru; secure; HttpOnly; SameSite=Lax\n&lt; set-cookie: buyer_selected_search_radius4=0_general; expires=Thu, 18-Mar-3019 13:28:28 GMT; Max-Age=31504464000; path=\/; domain=.avito.ru; secure; SameSite=Lax\n&lt; set-cookie: tmpBannerHash=; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=\/; secure; HttpOnly; SameSite=Lax\n&lt; set-cookie: tmpSideBlockHash=; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=\/; secure; HttpOnly; SameSite=Lax\n&lt; set-cookie: tmpSearchBottomHash=; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=\/; secure; HttpOnly; SameSite=Lax\n&lt; set-cookie: sx=H4sIAAAAAAACAw3EwQqAIAwA0H%2FZucOiJcu%2FyYiRA4UWDhL%2Fvd7hdVjSu0tpT0lVSQ5CY%2FJ%2Fh9ihQYQr31osaMskfpCIV0UUFkOuajDBCXEOuBKFDXmMD9eve2RUAAAA; expires=Sat, 21-Nov-2020 13:28:28 GMT; Max-Age=604800; path=\/; domain=.avito.ru; secure; HttpOnly; SameSite=Lax\n&lt; set-cookie: so=1605360508; expires=Sat, 14-Nov-2020 13:43:28 GMT; Max-Age=900; path=\/; domain=.avito.ru; secure; HttpOnly; SameSite=Lax\n&lt; set-cookie: dfp_group=52; expires=Sat, 14-Nov-2020 13:38:28 GMT; Max-Age=600; path=\/; domain=.avito.ru; secure; HttpOnly; SameSite=Lax\n&lt; set-cookie: buyer_laas_tooltip=; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=\/; domain=.avito.ru; secure; HttpOnly; SameSite=Lax\n&lt; set-cookie: tmpSrcFromBp=ijrkns6kvj4gwc4ggwok00g8gs08oks; expires=Sat, 14-Nov-2020 14:28:28 GMT; Max-Age=3600; path=\/; domain=.avito.ru; secure; HttpOnly; SameSite=Lax\n&lt; set-cookie: sessid=e33049edd828b91d73300175d802c306.1605360508; expires=Sun, 15-Nov-2020 13:28:28 GMT; Max-Age=86400; path=\/; domain=.avito.ru; secure; HttpOnly; SameSite=Lax\n&lt; set-cookie: buyer_from_page=; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=\/; secure; HttpOnly; SameSite=Lax\n&lt; x-request-url: \/moscow\n&lt; x-envoy-upstream-service-time: 532\n&lt; x-xss-protection: 1; mode=block\n&lt; x-content-type-options: nosniff\n&lt; \n\n&lt;!DOCTYPE html&gt;\n   \n&lt;html&gt; &lt;head&gt; &lt;script&gt;<\/pre>\n<p>\u6211\u5fc5\u987b\u5c1d\u8bd5\u4ec0\u4e48\u624d\u80fd\u50cf curl \u4e00\u6837\u5728 golang \u4e2d\u83b7\u5f97\u72b6\u6001 200\uff1f \u8c22\u8c22<\/p>\n<p> <\/p>\n<h2>\u89e3\u51b3\u65b9\u6848<\/h2>\n<p> <\/p>\n<p>\u8fd9\u662f\u5de5\u4f5c\u793a\u4f8b\uff1a<\/p>\n<pre>package main\nimport \"net\/http\"\n\nfunc main() {\n   r, e := http.Head(\"https:\/\/www.avito.ru\/moscow\")\n   if e != nil {\n      panic(e)\n   }\n   println(r.StatusCode == 200)\n}<\/pre>\n<p>\u4eca\u5929\u5173\u4e8e\u300aCurl \u548c Golang \u4e2d\u7684\u4e0d\u540c\u8bf7\u6c42\u72b6\u6001\uff08200 \u548c 403\uff09\u300b\u7684\u5185\u5bb9\u5c31\u4ecb\u7ecd\u5230\u8fd9\u91cc\u4e86\uff0c\u662f\u4e0d\u662f\u5b66\u8d77\u6765\u4e00\u76ee\u4e86\u7136\uff01\u60f3\u8981\u4e86\u89e3\u66f4\u591a\u5173\u4e8e\u7684\u5185\u5bb9\u8bf7\u5173\u6ce8\u516c\u4f17\u53f7\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5f53\u524d\u4f4d\u7f6e\uff1a &gt; &gt; &#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4925],"tags":[],"class_list":["post-208288","post","type-post","status-publish","format-standard","hentry","category-4925"],"_links":{"self":[{"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/posts\/208288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/comments?post=208288"}],"version-history":[{"count":0,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/posts\/208288\/revisions"}],"wp:attachment":[{"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/media?parent=208288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/categories?post=208288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/tags?post=208288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}