Maximum aantal nieuwe pogingen overschreden met URL in verzoeken

Ik probeer de inhoud van App Store &gt ; Zakelijk:

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)

Als ik het rangeprobeer met (0,2)werkt het, maar als ik het rangein 100s het toont deze fout:

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)

Antwoord 1, autoriteit 100%

Wat hier is gebeurd, is dat de itunes-server je verbinding weigert (je verzendt te veel verzoeken vanaf hetzelfde ip-adres in korte tijd)

Maximum aantal nieuwe pogingen overschreden met url: /in/app/adobe-reader/id469337564?mt=8

fouttracering is misleidend, het zou zoiets moeten zijn als “Er kan geen verbinding worden gemaakt omdat de doelcomputer dit actief heeft geweigerd”.

Er is een probleem op de python.requests lib op Github, bekijk het hier

Om dit probleem op te lossen (niet zozeer een probleem als wel een misleidende debug-tracering) moet u verbindingsgerelateerde uitzonderingen opvangen, zoals:

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

Een andere manier om dit probleem op te lossen is als u voldoende tijd gebruikt om verzoeken naar de server te sturen. Dit kan worden bereikt door de functie sleep(timeinsec)in python (vergeet niet om slaap te importeren)

from time import sleep

Al met al is het een geweldige python lib, hoop dat dit je probleem oplost.


Antwoord 2, autoriteit 97%

Gebruik gewoon de functies van requests':

import requests
from requests.adapters import HTTPAdapter
from requests.packages.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)

Hiermee wordt de URL GETen 3 keer opnieuw geprobeerd in het geval van requests.exceptions.ConnectionError. backoff_factorhelpt bij het toepassen van vertragingen tussen pogingen om te voorkomen dat ze opnieuw mislukken in het geval van een periodiek verzoekquotum.

Bekijk requests.packages.urllib3.util.retry.Retry, het heeft veel opties om het opnieuw proberen te vereenvoudigen.


Antwoord 3, autoriteit 25%

Doe dit gewoon,

Plak de volgende code in plaats van 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

Graag gedaan 🙂


Antwoord 4, autoriteit 20%

pip install pyopensslleek het voor mij op te lossen.

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


Antwoord 5, autoriteit 16%

Ik heb een soortgelijk probleem, maar de volgende code werkte voor mij.

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

“verify=False” schakelt SSL-verificatie uit. Proberen en vangen kan zoals gewoonlijk worden toegevoegd.


Antwoord 6, autoriteit 5%

Het specificeren van de proxy in een bedrijfsomgeving loste het voor mij op.

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

De volledige fout is:

requests.exceptions.ConnectionError: HTTPSConnectionPool(host=’www.google.com’, port=80): Max. aantal nieuwe pogingen overschreden met url: / (Veroorzaakt door NewConnectionError(‘: Kan geen nieuwe verbinding tot stand brengen: [WinError 10060] ] Een verbindingspoging is mislukt omdat de verbonden partij na een bepaalde tijd niet correct heeft gereageerd, of de tot stand gebrachte verbinding is mislukt omdat de verbonden host niet heeft gereageerd’))


Antwoord 7, autoriteit 4%

Het is altijd goed om exception handling te implementeren. Het helpt niet alleen om onverwacht afsluiten van het script te voorkomen, maar kan ook helpen bij het loggen van fouten en infomeldingen. Bij het gebruik van Python-verzoeken vang ik het liefst uitzonderingen zoals deze:

   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")

Hier is renewIPadress() een door de gebruiker gedefinieerde functie die het IP-adres kan wijzigen als het wordt geblokkeerd. U kunt zonder deze functie.


Antwoord 8, autoriteit 2%

Mijn eigen ervaring toevoegen voor degenen die dit in de toekomst ervaren. Mijn specifieke fout was

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

Het bleek dat dit eigenlijk was omdat ik het maximale aantal open bestanden op mijn systeem had bereikt. Het had niets te maken met mislukte verbindingen, of zelfs een DNS-fout zoals aangegeven.


Antwoord 9

Toen ik een selenium browser-testscript aan het schrijven was, kwam ik deze fout tegen bij het aanroepen van driver.quit()voordat een JS api-aanroep werd gebruikt. Onthoud dat het afsluiten van webdriver het laatste is wat u hoeft te doen!


Antwoord 10

ik kon het niet laten werken op Windows, zelfs niet na het installeren van pyopenssl en het proberen van verschillende python-versies (terwijl het prima werkte op mac), dus schakelde ik over naar urllib en het werkt op python 3.6 (van python .org) en 3.7 (anaconda)

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

Antwoord 11

Het kan ook een netwerkconfiguratieprobleem zijn. Dus daarvoor moet je je netwerkconfiguraties opnieuw configureren.

voor Ubuntu :
sudo vim /etc/network/interfaces

voeg 8.8.8.8 toe aan dns-nameserver en sla het op.

reset uw netwerk: /etc/init.d/networking restart

Probeer het nu..


Antwoord 12

Mijn eigen ervaring toevoegen:

r = requests.get(download_url)

toen ik probeerde een bestand te downloaden dat in de url is gespecificeerd.

De fout was

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')])")))

Ik heb het gecorrigeerd door verify = Falseals volgt in de functie toe te voegen:

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

Antwoord 13

Controleer uw netwerkverbinding. Ik had dit en de VM had geen goede netwerkverbinding.


Antwoord 14

Ik had dezelfde fout toen ik de route in de browser uitvoerde, maar in de postbode werkt het prima. Het probleem met de mijne was dat er geen /was na de route vóór de queryreeks.

127.0.0.1:5000/api/v1/search/?location=Madinageef de fout weer en verwijder /nadat de searchwerkte voor mij.


Antwoord 15

gewoon import time
en voeg toe:

time.sleep(6)

ergens in de for-lus, om te voorkomen dat er in korte tijd te veel verzoeken naar de server worden gestuurd.
het cijfer 6 betekent: 6 seconden.
blijf nummers testen vanaf 1, totdat je het minimum aantal seconden hebt bereikt dat het probleem helpt voorkomen.


Antwoord 16

Voeg kopteksten toe voor dit verzoek.

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)

Other episodes