【问题标题】:python web request timeout error (requests.exceptions.ConnectTimeout: HTTPSConnectionPool)python web请求超时错误(requests.exceptions.ConnectTimeout:HTTPSConnectionPool)
【发布时间】:2021-10-28 14:55:15
【问题描述】:

我已经编写了一个 python 代码从文件中获取子域并执行 Web 请求我正在使用 get 方法我将超时设置为 5 秒,当请求时间少于 5 秒但当请求时间超过5秒它显示我一个错误。错误说 requests.exceptions.ConnectTimeout: HTTPSConnectionPool(..,..),我知道与 异常处理 有关,但我不知道它是什么. 下面的代码sn-p:

import requests
import time 

subdomain = []
with open("test.txt","r") as test:
    lines = test.readlines()
count = 0 
for i in lines:
    count = count +1
    subdomain.append(i)

for urls in subdomain:
    
    make_request = requests.get(urls,timeout=5)
    print(make_request.status_code)

【问题讨论】:

  • 我认为您的requests.get(urls) 一次调用了太多urls,也许应该是for urls in subdomain: for url in urls
  • 我正在编写代码来执行多请求(线程),但现在我还没有实现它,因为我有这个问题

标签: python python-3.x exception get request


【解决方案1】:

我已经删除了您代码中一些不必要的部分,并按照您的要求添加了异常。这是一个可行的解决方案:

import requests
import time 

subdomain = []
with open("test.txt","r") as test:
    subdomain = test.readlines()
count = len(subdomain)

for urls in subdomain:
    try:
        make_request = requests.get(urls,timeout=5)
    except requests.exceptions.ConnectTimeout:
        print("timeout", urls)
        continue
    print(make_request.status_code)

您甚至可以摆脱第二个for loop,因为您的阅读器已经是一个循环:

import requests
import time 

subdomain = []
count = 0
with open("test.txt","r") as test:
    for count, urls in enumerate(test):
        try:
            make_request = requests.get(urls,timeout=5)
        except requests.exceptions.ConnectTimeout:
            print("timeout", urls)
            continue
        print(make_request.status_code)

【讨论】:

    【解决方案2】:

    您可以在请求调用周围添加try/except,处理好的异常

    with open("test.txt", "r") as test:
        subdomain = test.read().splitlines()
        count = len(subdomain)
    
    for urls in subdomain:
        try:
            make_request = requests.get(urls, timeout=5)
            print(make_request.status_code)
        except requests.exceptions.ConnectTimeout:
            print("Request to", urls, "timed out")
    

    我也不建议f.readlines(),因为它将换行符保留在每个字符的末尾,而是完整读取然后拆分每一行

    【讨论】:

    • 是的,这很好用,我发现即使使用 except 没有 requests.exceptions.ConnectTimeout 它也可以工作
    猜你喜欢
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多