drfb52000 2018-09-21 01:39
浏览 145
已采纳

简单的HTTPS请求:Golang返回505,Python和Chrome运行正常

I'm attempting to perform an HTTP get over TLS using the simplest imaginable golang code and getting a 505 response from a server (HTTP version not supported). The thing is, with a simple python requests.get the same query works. Also, I can use Chrome and perform the same request successfully.

Any ideas what makes the golang request different that would cause the server to return the 505?

I realize that this response is server specific. HTTPS to google.com with the same golang code works. I've attempted troubleshooting with Wireshark but TLS makes this difficult. It seems like this must be something simple! The server is nginx 1.9.3.

Golang code:

package main

import (
        "fmt"
        "net/http"
        "time"
)

func main() {
        url := "https://non-public-address/page"
        tr := &http.Transport{
                MaxIdleConns:       10,
                IdleConnTimeout:    30 * time.Second,
                DisableCompression: false,
        }
        client := &http.Client{Transport: tr}
        resp, _ := client.Get(url)
        fmt.Println(resp)
}

Python:

r = requests.get("https://non-public-address/page")
print(r)
  • 写回答

2条回答 默认 最新

  • duanjiani6826 2018-09-22 21:10
    关注

    I figured out the issue eventually by decrypting the traffic in Wireshark. The URL in my Go implementation has spaces and using http.Get didn't URL encode the spaces to %20. With spaces in the GET request the server was misinterpreting the request.

    Lesson learned: Go's http.Get does not URL encode characters and you have to do this on your own.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 ecplise在连接数据库时显示加载驱动成功但是数据库连接失败
  • ¥15 visionmaster启动失败,提示为“机器不满足授权而被禁用”
  • ¥50 用logisim设计16位单时钟周期cpu
  • ¥15 IDEA中圈复杂度如何具体设置
  • ¥50 labview采集不了数据
  • ¥15 Multisim红外倒车雷达仿真中距离问题
  • ¥15 请上面代码做什么处理或什么混淆
  • ¥15 英雄联盟自定义房间置顶
  • ¥15 W5500网线插上无反应
  • ¥15 如何用字典的Key,显示在WPF的xaml中