问题
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
相关
推荐
推荐两个请求类:
以上,仅做记录。由于暂未查询到问题原因,后续持续更新。