获取“127.0.0.1 无法分配请求的地址” - http.Client

我正在做的事情相当简单。我需要创建一个非常小且快速的“代理”服务器。目前我有一个被代理到(nodejs)和一个代理服务(go)的基线服务器。请原谅缺乏实际的“代理” - 现在只是测试。


基线服务


var http = require('http');

http.createServer(function (req, res) {

    // console.log("received request");

    res.writeHead(200, {'Content-Type': 'text/plain'});

      res.end('Hello World\n');

}).listen(8080, '127.0.0.1');

console.log('Server running at http://127.0.0.1:8080/');

代理服务


package main


import (

  "flag"

  "log"

  "net/http"

  "net/url"

)


var (

  listen = flag.String("listen", "0.0.0.0:9000", "listen on address")

  logp = flag.Bool("log", false, "enable logging")

)


func main() {

  flag.Parse()

  proxyHandler := http.HandlerFunc(proxyHandlerFunc)

  log.Fatal(http.ListenAndServe(*listen, proxyHandler))

  log.Println("Started router-server on 0.0.0.0:9000")

}


func proxyHandlerFunc(w http.ResponseWriter, r *http.Request) {

  // Log if requested

  if *logp {

    log.Println(r.URL)

  }


  /* 

   * Tweak the request as appropriate:

   *   - RequestURI may not be sent to client

   *   - Set new URL

   */

  r.RequestURI = ""

  u, err := url.Parse("http://localhost:8080/")

  if err != nil {

    log.Fatal(err)

  }

  r.URL = u


  // And proxy

  // resp, err := client.Do(r)

  c := make(chan *http.Response)

  go doRequest(c)

  resp := <-c

  if resp != nil {

    err := resp.Write(w)

    if err != nil {

      log.Println("Error writing response")

    } else {

      resp.Body.Close()

    }

  }

}



func doRequest(c chan *http.Response) {

  // new client for every request.

  client := &http.Client{}


  resp, err := client.Get("http://127.0.0.1:8080/test")

  if err != nil {

    log.Println(err)

    c <- nil

  } else {

    c <- resp

  }

}

正如标题中提到的,我的问题是我收到了2013/10/28 21:22:30 Get http://127.0.0.1:8080/test: dial tcp 127.0.0.1:8080: can't assign requested address来自doRequest函数的错误说明,我不知道为什么。谷歌搜索这个特定的错误会产生看似无关的结果。


Smart猫小萌
浏览 615回答 3
3回答

莫回无

我也遇到过这个问题,我添加了一个选项 {DisableKeepAlives: true} 到 http.Transport 解决了这个问题,你可以试试。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go