问题

error malformed HTTP response ""

探究

根据目前的测试情况,得出的结论是:

htmlhttp://apihttp://

待后续多次验证。

经验证: 以上结论 错误

http://ip38.com/htmlhttp://27.203.219.181:8060http://ip38.com/html27.203.219.181:8060https://www.cnblogs.com/htmlhttp://27.203.219.181:8060error,malformed HTTP response ""https://www.cnblogs.com/html27.203.219.181:8060https://p.3.cn/prices/mgetsjsonhttp://27.203.219.181:8060error,malformed HTTP response ""https://p.3.cn/prices/mgetsjson27.203.219.181:8060

即:

http://ip38.com/http://27.203.219.181:8060https://www.cnblogs.com/27.203.219.181:8060https://p.3.cn/prices/mgets27.203.219.181:8060

我的一种解法

项目中在测试使用代理的代码段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
    // 使用了代理ip

//为防止使用代理ip请求超时太长,设置默认超时时间为30s
if _, ok := rh["time-out"]; !ok {
// 请求头中 time-out 参数不存在
rh["time-out"] = 30
}

is_malformedHttp := false

HandleProxy:
for _, ag := range rAgents {
// 表示在使用proxy ip时,是否遇到返回错误信息为 malformed HTTP response "<html>" 的情况

if is_malformedHttp {
// 将代理ip的 http:// 去掉
ag = GetHostAndPort(ag)
fmt.Printf("[info] remove http for proxy ip: %s .\n", ag)
}

rh["proxy"] = ag
fmt.Printf("[info] use proxy to request: %s .\n", ag)

resData, errMsg = req.XReq(rUrl, rh, rp)
if errMsg != nil {
fmt.Printf("[info] the proxy result error: %s .\n", errMsg.Error())

if !is_malformedHttp {
// 当 is_malf 为 false时,才对 mailformed http response 处理
if strings.Contains(errMsg.Error(), "malformed HTTP response") {
fmt.Printf("[error] the proxy ip format error: %s .\n", errMsg.Error())
is_malformedHttp = true
time.Sleep(1 * time.Second)
goto HandleProxy
}
}
continue
} else {
fmt.Printf("[info] the proxy ok %s .\n", ag)
break
}
}

实现逻辑是:

http://27.203.219.181:8060malformed HTTP response
gotoforhost:port
malformed HTTP responsegotoforis_malformedHttp

后经测试验证,这种方法无效。


验证结果:

["http://192.168.1.100:8080","192.168.1.120:8080"]["192.168.1.100:8080","192.168.1.120:8080"]

猜测

为什么在代理Ip经处理后的请求,仍然会出错呢?

defer

defer语句调用一个函数,这个函数执行会推迟,直到外围的函数返回,或者外围函数运行到最后,或者相应的goroutine panic.

deferclosedeferfor
http://

之后如何处理

http://27.203.219.181:8060malformed HTTP response27.203.219.181:8060

相关

推荐

推荐两个请求类:


以上,仅做记录。由于暂未查询到问题原因,后续持续更新。