요청의 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)
작동하긴 하지만, 제가 이 모든 것들을range
100
는 이 있습니다.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.ConnectionError
backoff_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
'programing' 카테고리의 다른 글
이름 목록을 반복하고 색상 목록을 반복하고 배경 색상 스타일을 해당 이름 중 하나에 바인딩합니다. (0) | 2023.01.04 |
---|---|
PHP Foreach 루프에서 처음과 마지막 반복을 결정하는 방법 (0) | 2023.01.04 |
SQL(MariaDB)에서 SELECT 문구가 중복되지 않도록 하는 방법 (0) | 2023.01.04 |
헤더 파일에서 함수를 "외부"로 만들어야 합니까? (0) | 2023.01.04 |
Symfony2에서 양식 필드의 기본값을 설정하는 방법 (0) | 2023.01.04 |