Warum url funktioniert im Browser aber nicht mit Anfragen bekommen Methode

Beim testen, habe ich gerade entdeckt, dass dies

url = ' http://wi312.rockdizfile.com/d/uclf2kr7fp4r2ge47pcuihdpky2chcsjur5nrds2hx53f26qgxnrktew/Kimbra%20-%20Love%20in%20High%20Places.mp3' 

Funktioniert im Browser und Datei-Download beginnt, aber wenn ich versuche, diese Datei mit zu holen

 requests.get(url) 

Es gibt massiven Fehler …

Irgendeine Ahnung, warum ist das passiert? In der Notwendigkeit zu dekodieren, damit es funktioniert?

Aktualisiere dies ist der Fehler, den ich immer bekomme:

 Exception in thread Thread-5: Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 810, in __bootstrap_inner self.run() File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 763, in run self.__target(*self.__args, **self.__kwargs) File "python/file_download.py", line 98, in _downloadChunk stream=True) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests-2.1.0-py2.7.egg/requests/api.py", line 55, in get return request('get', url, **kwargs) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests-2.1.0-py2.7.egg/requests/api.py", line 44, in request return session.request(method=method, url=url, **kwargs) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests-2.1.0-py2.7.egg/requests/sessions.py", line 382, in request resp = self.send(prep, **send_kwargs) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests-2.1.0-py2.7.egg/requests/sessions.py", line 485, in send r = adapter.send(request, **kwargs) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests-2.1.0-py2.7.egg/requests/adapters.py", line 381, in send raise Timeout(e) Timeout: (<requests.packages.urllib3.connectionpool.HTTPConnectionPool object at 0x10258de90>, 'Connection to wi312.rockdizfile.com timed out. (connect timeout=0.001)') 

Es gab keinen Platz, wenn ich gepostet habe, es war nur in Newline, weil ich Inline-Code eingebettet.

Hier ist der Code, der Anfragen stellt: (auch neue URL: http://archive.org/download/LucyIsabelleMarsh/LucyIsabelleMarsh-ItalianStreetSong.mp3 )

 import requests import signal import sys import time import threading import utils as _fdUtils from socket import error as SocketError, timeout as SocketTimeout def _downloadChunk(url, idx, irange, fileName, sizeInBytes): _log.debug("Downloading %s for first chunk %s " % (irange, idx+1)) pulledSize = irange[-1] try: resp = requests.get(url, allow_redirects=False, timeout=0.001, headers={'Range': 'bytes=%s-%s' % (str(irange[0]), str(irange[-1]))}, stream=True) except (SocketTimeout, requests.exceptions), e: _log.error(e) return chunk_size = str(irange[-1]) for chunk in resp.iter_content(chunk_size): status = r"%10d [%3.2f%%]" % (pulledSize, pulledSize * 100. / int(chunk_size)) status = status + chr(8)*(len(status)+1) sys.stdout.write('%s\r' % status) sys.stdout.flush() pulledSize += len(chunk) dataDict[idx] = chunk time.sleep(.03) if pulledSize == sizeInBytes: _log.info("%s downloaded %3.0f%%", fileName, pulledSize * 100. / sizeInBytes) class ThreadedFetch(threading.Thread): """ docstring for ThreadedFetch """ def __init__(self, saveTo, queue): super(ThreadedFetch, self).__init__() self.queue = queue self.__saveTo = saveTo def run(self): threadLimiter.acquire() try: items = self.queue.get() url = items[0] split = items[-1] fileName = _fdUtils.getFileName(url) # grab split chunks in separate thread. if split > 1: maxSplits.acquire() try: sizeInBytes = _fdUtils.getUrlSizeInBytes(url) if sizeInBytes: byteRanges = _fdUtils.getRangeSegements(sizeInBytes, split) else: byteRanges = ['0-'] filePath = os.path.join(self.__saveTo, fileName) downloaders = [ threading.Thread( target=_downloadChunk, args=(url, idx, irange, fileName, sizeInBytes), ) for idx, irange in enumerate(byteRanges) ] # start threads, let run in parallel, wait for all to finish for th in downloaders: th.start() # this makes the wait for all thread to finish # which confirms the dataDict is up-to-date for th in downloaders: th.join() downloadedSize = 0 with open(filePath, 'wb') as fh: for _idx, chunk in sorted(dataDict.iteritems()): downloadedSize += len(chunk) status = r"%10d [%3.2f%%]" % (downloadedSize, downloadedSize * 100. / sizeInBytes) status = status + chr(8)*(len(status)+1) fh.write(chunk) sys.stdout.write('%s\r' % status) time.sleep(.04) sys.stdout.flush() if downloadedSize == sizeInBytes: _log.info("%s, saved to %s", fileName, self.__saveTo) self.queue.task_done() finally: maxSplits.release() 

  • Wie finde ich den Weg zu einer SSL-Zertifikat?
  • In Anfragen Bibliothek, wie kann ich vermeiden, "HttpConnectionPool ist voll, verwerfen Verbindung" Warnung?
  • Wie macht man HTTP POST auf der Website, die asp.net verwendet?
  • HTTPS-Proxies mit Anfragen: [Errno 8] _ssl.c: 504: EOF trat bei Verletzung des Protokolls auf
  • Python-Anfragen: SSL-Zertifikat aus Datenbank laden
  • Django Rest Framework: leere request.data
  • 2 Solutions collect form web for “Warum url funktioniert im Browser aber nicht mit Anfragen bekommen Methode”

    Der Traceback zeigt eine Timeout Ausnahme an, und in deinem Code hast du ja ein sehr kurzes Timeout-Set, entweder dein Limit entfernen oder es erhöhen:

     requests.get(url, allow_redirects=False, timeout=0.001, # <-- this is very short 

    Auch wenn Sie auf localhost (Ihren eigenen Computer) zugreifen, wird ein solches Timeout zu einer Timeout-Ausnahme führen. Aus der Dokumentation :

    Hinweis

    Timeout ist keine Zeitbegrenzung für den gesamten Download-Download; Vielmehr wird eine Ausnahme ausgelöst, wenn der Server keine Antwort für Timeout Sekunden ausgegeben hat (genauer gesagt, wenn keine Bytes auf dem zugrunde liegenden Socket für Timeout Sekunden empfangen wurden).

    So tut es nicht, was man erwarten könnte.

    Sie haben einen Leerzeichen vor dem Start der URL, die eine requests.exceptions.InvalidSchema Fehler:

     url = ' http://wi312.rockdizfile.com/d/uclf2kr7fp4r2ge47pcuihdpky2chcsjur5nrds2hx53f26qgxnrktew/Kimbra%20-%20Love%20in%20High%20Places.mp3' 

    Ändern:

     url = 'http://wi312.rockdizfile.com/d/uclf2kr7fp4r2ge47pcuihdpky2chcsjur5nrds2hx53f26qgxnrktew/Kimbra%20-%20Love%20in%20High%20Places.mp3' 
    Python ist die beste Programmiersprache der Welt.