programing

요청의 URL에서 최대 재시도 횟수를 초과했습니다.

minecode 2023. 1. 4. 20:24
반응형

요청의 URL에서 최대 재시도 횟수를 초과했습니다.

App Store > Business의 콘텐츠를 입수하려고 합니다.

import requests
from lxml import html

page = requests.get("https://itunes.apple.com/in/genre/ios-business/id6000?mt=8")
tree = html.fromstring(page.text)

flist = []
plist = []
for i in range(0, 100):
    app = tree.xpath("//div[@class='column first']/ul/li/a/@href")
    ap = app[0]
    page1 = requests.get(ap)

★★★★★★★★★★★★★★★★★★★★★를 시험해 보면,range(0,2)작동하긴 하지만, 제가 이 모든 것들을range100는 이 있습니다.s는 이에러를 나타내고 있습니다.

Traceback (most recent call last):
  File "/home/preetham/Desktop/eg.py", line 17, in <module>
    page1 = requests.get(ap)
  File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 55, in get
    return request('get', url, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 44, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 383, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 486, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 378, in send
    raise ConnectionError(e)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='itunes.apple.com', port=443): Max retries exceeded with url: /in/app/adobe-reader/id469337564?mt=8 (Caused by <class 'socket.gaierror'>: [Errno -2] Name or service not known)

쓰세요.requests★★★★

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry


session = requests.Session()
retry = Retry(connect=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)

session.get(url)

으로 ★★★★★★★★★★★★★★★★.GET이 3번일 합니다.requests.exceptions.ConnectionErrorbackoff_factor는 정기적인 요구 쿼터 발생 시 실패를 회피하기 위해 시도 간에 지연을 적용하는 데 도움이 됩니다.

를 참조해 주세요.재시도를 단순화하는 옵션이 많이 있습니다.

여기서 일어나는 일은 itunes 서버가 연결을 거부한다는 것입니다(단기간에 동일한 IP 주소에서 너무 많은 요청을 보내고 있습니다).

최대 재시도 횟수 초과(url: /in/app/snf-snf/id469337564?mt=8)

에러 트레이스는, 「타깃 머신이 적극적으로 거부했기 때문에 접속할 수 없었습니다」라고 하는 오해를 낳습니다.

Github의 python.requests lib에 관한 문제가 있습니다.여기에서 확인하세요.

이 문제를 해결하려면(디버깅트레이스를 잘못 해석하는 문제라기보다는) 다음과 같은 연결 관련 예외를 포착해야 합니다.

try:
    page1 = requests.get(ap)
except requests.exceptions.ConnectionError:
    r.status_code = "Connection refused"

하는 또 하는 데 하는 경우, 는 " " "에 의해 될 수 .sleep(timeinsec)python의 것을 잊지 마세요)

from time import sleep

모든 요청은 멋진 python lib입니다.그것이 당신의 문제를 해결하기를 바랍니다.

그냥 이렇게 해.

코드 대신 를 붙여주세요.page = requests.get(url):

import time

page = ''
while page == '':
    try:
        page = requests.get(url)
        break
    except:
        print("Connection refused by the server..")
        print("Let me sleep for 5 seconds")
        print("ZZzzzz...")
        time.sleep(5)
        print("Was a nice sleep, now let me continue...")
        continue

천만에요 :)

저도 비슷한 문제가 발생했지만, 아래의 코드가 효과가 있었습니다.

url = <some REST url>    
page = requests.get(url, verify=False)

"verify=False"를 지정하면 SSL 검증이 비활성화됩니다.Try and catch는 평소대로 추가할 수 있습니다.

pip install pyopenssl★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

https://github.com/requests/requests/issues/4246

기업 환경에서 프록시를 지정하면 문제가 해결되었습니다.

page = requests.get("http://www.google.com:80", proxies={"http": "http://111.233.225.166:1234"})

완전한 오류는 다음과 같습니다.

요청한다.예외입니다.ConnectionError: HTPSConnectionPool(host='www.google.com', port=80): 최대 재시도 횟수가 URL: /(NewConnectionError(': 새 연결을 설정하지 못했습니다. [WinError 10060]) 일정 시간 후 연결 당사자가 제대로 응답하지 않았거나 연결이 설정되지 않아 연결 시도가 실패했습니다.t가 응답하지 않았습니다.)

예외 처리는 항상 실행하는 것이 좋습니다.스크립트가 예기치 않게 종료되는 것을 방지할 수 있을 뿐만 아니라 오류 및 정보 알림을 기록할 수도 있습니다.Python 요청을 사용할 때 다음과 같은 예외를 포착하는 것이 좋습니다.

    try:
        res = requests.get(adress,timeout=30)
    except requests.ConnectionError as e:
        print("OOPS!! Connection Error. Make sure you are connected to Internet. Technical Details given below.\n")
        print(str(e))            
        renewIPadress()
        continue
    except requests.Timeout as e:
        print("OOPS!! Timeout Error")
        print(str(e))
        renewIPadress()
        continue
    except requests.RequestException as e:
        print("OOPS!! General Error")
        print(str(e))
        renewIPadress()
        continue
    except KeyboardInterrupt:
        print("Someone closed the program")

여기서 갱신하다IPadress()는 차단되었을 때 IP 주소를 변경할 수 있는 사용자 정의 함수입니다.이 기능은 없어도 괜찮습니다.

장래에 이것을 경험하고 있는 분들을 위해서, 저 자신의 경험을 더합니다.저의 구체적인 실수는

Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known'

이는 실제로 시스템에서 열려 있는 파일의 최대 수에 도달했기 때문인 것으로 나타났습니다.접속 장애나 DNS 에러와는 전혀 관계가 없습니다.

때 이했습니다.driver.quit()JS API " " " " "웹드라이버는 그만두면 안 된다는 것을 기억하세요!

pyopensl을 설치하고 여러 python 버전을 사용해 봐도 Windows에서 동작하지 않아(mac에서는 정상적으로 동작하지만), urlib로 전환하면 python 3.6 (python . from python )와 3.7 (anaconda)에서 동작합니다.

import urllib 
from urllib.request import urlopen
html = urlopen("http://pythonscraping.com/pages/page1.html")
contents = html.read()
print(contents)

★★★★★★★★★★★★★★★★★.import time :: and : 。

time.sleep(6)

단시간에 서버에 너무 많은 요구를 송신하지 않도록 하기 위해서, for 루프내의 어딘가에 있습니다.숫자 6은 6초를 의미합니다.테스트 수치를 1부터 시작하여 문제를 회피하는 데 도움이 되는 최소 초수에 도달할 때까지 유지합니다.

네트워크 구성 문제일 수도 있습니다.그러기 위해서는, 네트워크 설정을 재설정할 필요가 있습니다.

Ubuntu의 경우: sudo vim /etc/network/interfaces

dns-nameserver에 8.8.8을 추가하여 저장합니다.

reset ur network : /etc/init.d/네트워킹 재시작

자, 이제 시도해 보세요.

나만의 경험 추가:

r = requests.get(download_url)

url에 지정된 파일을 다운로드하려고 했을 때.

에러는

HTTPSConnectionPool(host, port=443): Max retries exceeded with url (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])")))

했습니다.verify = False로 표현합니다.

r = requests.get(download_url + filename)
open(filename, 'wb').write(r.content)

네트워크 연결을 확인합니다.이 기능을 사용했는데 VM의 네트워크 연결이 제대로 되어 있지 않았습니다.

브라우저에서 경로를 실행할 때도 같은 오류가 발생했지만 우체부에서는 정상적으로 작동합니다.내 문제는 그게 아니었다는 거야/을 사용하다

127.0.0.1:5000/api/v1/search/?location=Madina하여 제거하다/search날 위해 일했어

은, 「」에 합니다.https://itunes.apple.com로 인해 하였기 때문에 을 알 수 있습니다 매핑에 대한 을 허가.https://itunes.apple.com 스크립트로 의 퍼블릭 IP 하는 것입니다 비단뱀이 스크립트는 임의의 도메인의 퍼블릭 IP 주소를 계산하여 /etc/hosts 파일에 매핑을 만듭니다.

import re
import socket
import subprocess
from typing import Tuple

ENDPOINT = 'https://anydomainname.example.com/'
ENDPOINT = 'https://itunes.apple.com/'

def get_public_ip() -> Tuple[str, str, str]:
    """
    Command to get public_ip address of host machine and endpoint domain
    Returns
    -------
    my_public_ip : str
        Ip address string of host machine.
    end_point_ip_address : str
        Ip address of endpoint domain host.
    end_point_domain : str
        domain name of endpoint.

    """
    # bash_command = """host myip.opendns.com resolver1.opendns.com | \
    #     grep "myip.opendns.com has" | awk '{print $4}'"""
    # bash_command = """curl ifconfig.co"""
    # bash_command = """curl ifconfig.me"""
    bash_command = """ curl icanhazip.com"""
    my_public_ip = subprocess.getoutput(bash_command)
    my_public_ip = re.compile("[0-9.]{4,}").findall(my_public_ip)[0]
    end_point_domain = (
        ENDPOINT.replace("https://", "")
        .replace("http://", "")
        .replace("/", "")
    )
    end_point_ip_address = socket.gethostbyname(end_point_domain)
    return my_public_ip, end_point_ip_address, end_point_domain


def set_etc_host(ip_address: str, domain: str) -> str:
    """
    A function to write mapping of ip_address and domain name in /etc/hosts.
    Ref: https://stackoverflow.com/questions/38302867/how-to-update-etc-hosts-file-in-docker-image-during-docker-build

    Parameters
    ----------
    ip_address : str
        IP address of the domain.
    domain : str
        domain name of endpoint.

    Returns
    -------
    str
        Message to identify success or failure of the operation.

    """
    bash_command = """echo "{}    {}" >> /etc/hosts""".format(ip_address, domain)
    output = subprocess.getoutput(bash_command)
    return output


if __name__ == "__main__":
    my_public_ip, end_point_ip_address, end_point_domain = get_public_ip()
    output = set_etc_host(ip_address=end_point_ip_address, domain=end_point_domain)
    print("My public IP address:", my_public_ip)
    print("ENDPOINT public IP address:", end_point_ip_address)
    print("ENDPOINT Domain Name:", end_point_domain )
    print("Command output:", output)

원하는 기능을 실행하기 전에 위의 스크립트를 호출할 수 있습니다.

내 상황은 좀 특별하다.위의 답변들을 시도해봤지만, 모두 효과가 없었습니다.갑자기 인터넷 프록시랑 관련이 있는 거 아니야?저는 중국 본토에 있고 인터넷 프록시 없이는 구글 같은 사이트에 접속할 수 없습니다.그리고 나서 인터넷 프록시를 꺼서 문제가 해결되었다.

제 경우 python 스크립트 내에 도커 컨테이너를 몇 개 배치한 후 배포된 서비스 중 하나를 호출합니다.서비스를 호출하기 전에 지연을 추가하면 오류가 수정됩니다.연계를 받을 준비가 되기까지 시간이 걸릴 것 같습니다.

from time import sleep
#deploy containers
#get URL of the container
sleep(5)
response = requests.get(url,verify=False)
print(response.json())

이 요청에 대한 헤더를 추가합니다.

headers={
'Referer': 'https://itunes.apple.com',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}

requests.get(ap, headers=headers)

게이지를 사용하여 테스트를 코딩하고 있는데 VPN을 활성화하지 않고 내부 URL을 요청하려고 했기 때문에 이 오류도 발생했습니다.

언급URL : https://stackoverflow.com/questions/23013220/max-retries-exceeded-with-url-in-requests

반응형