使用 Python 请求来取消缩短网址 - 慢与 pycurl 相比

问题描述

这是关于取消缩短网址以显示最终网址。

我一直在使用 pycurl,并且实时查找(例如)~80 个 url 需要 ~24 秒。

使用下面的简单请求代码,查找相同的 ~80 个 url 需要 ~55 秒

(我对不同的 url 集进行了多次运行,请求 总是 花费大约两倍的时间来进行查找)

我的 pycurl 代码如下所示:

conn = pycurl.Curl()
conn.setopt(pycurl.CAINFO,certifi.where())
conn.setopt(pycurl.FOLLOWLOCATION,True)
conn.setopt(pycurl.MAXREDirs,10)
conn.setopt(pycurl.CUSTomrEQUEST,"HEAD")
conn.setopt(pycurl.TIMEOUT,3)
conn.setopt(pycurl.NOBODY,True)
conn.setopt(pycurl.SSL_VERIFYHOST,0)

def pycurl_lookup(url):
    try:
        conn.setopt(pycurl.URL,url)
        conn.perform()
        real_url = conn.getinfo(pycurl.EFFECTIVE_URL)
        print(real_url)
    except pycurl.error as pce:
        print(pce,url,conn.getinfo(pycurl.HTTP_CODE))

   

我的请求代码很简单:

def requests_lookup(url):

    session = requests.Session()
    session.max_redirects = 10

    try:
        reply = session.head(url,allow_redirects=True,timeout=3)
        real_url = reply.url
        print(real_url)
    except (requests.Timeout,requests.TooManyRedirects) as rte:
        print(rte)

有什么办法可以加快请求版本的速度,还是 pycurl 出于某种原因只是更快?

为了完整起见,我会注意到将会话设置移到请求函数定义之外会显着减少延迟(我一如既往的糟糕编码)但它仍然比 pycurl 慢 40% 左右

session = requests.Session()
session.max_redirects = 10

def requests_lookup(url):

    session = requests.Session()
    session.max_redirects = 10

    try:
        reply = session.head(url,requests.TooManyRedirects) as rte:
        print(rte)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)