在我的脚本中,requests.get永远不会返回:
import requests
print ("requesting..")
# This call never returns!
r = requests.get(
"http://www.justdial.com",
proxies = {'http': '222.255.169.74:8080'},
)
print(r.ok)
Run Code Online (Sandbox Code Playgroud)
可能的原因是什么?任何补救措施?get使用的默认超时是多少?
使用 requests 库请求 Web 资源或网站或 Web 服务时,请求需要很长时间才能完成。该代码类似于以下内容:
import requests
requests.get("https://www.example.com/")
Run Code Online (Sandbox Code Playgroud)
此请求需要 2 多分钟(正好 2 分 10 秒)才能完成!为什么它这么慢,我该如何解决?
Python"请求"库目前风靡一时,因为它提供了用于发出HTTP请求的漂亮界面 - 但在它下面似乎有很多层间接 - 会话,HTTP适配器,最后是urllib3的机制.
如果我已经拥有一个打开的套接字,并希望使用"请求"在该套接字下发送HTTP响应并收到回复,那么在这个抽象堆栈中哪里是干预的正确位置?
如果没有某种干预(或自定义?),堆栈将尝试为我创建一个新的TCP/IP套接字,但在我的特定应用程序中,我的代码在代表我已建立连接之前不会被调用,所以我会如果我想能够使用请求的功能,需要说服请求在现有套接字上进行通话.
请求库:
我使用 go1.11 net/http 并且想判断域是否仅支持 ipv6。
我创建了自己的 DialContext,因为我想检测域是否仅支持 ipv6。下面的代码
package main
import (
"errors"
"fmt"
"net"
"net/http"
"syscall"
"time"
)
func ModifiedTransport() {
var MyTransport = &http.Transport{
DialContext: (&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
DualStack: false,
Control: func(network, address string, c syscall.RawConn) error {
if network == "ipv4" {
// I want to cancel connection here client.Get("http://myexample.com") return a non-nil err.
return errors.New("you should not use ipv4")
}
return nil
},
}).DialContext,
MaxIdleConns: 100,
IdleConnTimeout: 90 * …Run Code Online (Sandbox Code Playgroud) 问题是使用httplib的urllib正在查询AAAA记录.
我想避免这种情况.有一个很好的方法吗?
>>> import socket
>>> socket.gethostbyname('www.python.org')
'82.94.164.162'
21:52:37.302028 IP 192.168.0.9.44992 > 192.168.0.1.53: 27463+ A? www.python.org. (32)
21:52:37.312031 IP 192.168.0.1.53 > 192.168.0.9.44992: 27463 1/0/0 A 82.94.164.162 (48)
python /usr/lib/python2.6/urllib.py -t http://www.python.org >/dev/null 2>&1
21:53:44.118314 IP 192.168.0.9.40669 > 192.168.0.1.53: 32354+ A? www.python.org. (32)
21:53:44.118647 IP 192.168.0.9.40669 > 192.168.0.1.53: 50414+ AAAA? www.python.org. (32)
21:53:44.122547 IP 192.168.0.1.53 > 192.168.0.9.40669: 32354 1/0/0 A 82.94.164.162 (48)
21:53:44.135215 IP 192.168.0.1.53 > 192.168.0.9.40669: 50414 1/0/0 AAAA[|domain]
Run Code Online (Sandbox Code Playgroud)