recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment télécharger des fichiers à l'aide de la bibliothèque de requêtes de Python ?

<p>J'utilise la bibliothèque de requêtes de Python pour effectuer une tâche simple, qui consiste à télécharger un fichier. J'ai effectué une recherche sur Stack Overflow et personne ne semble avoir le même problème, où le fichier n'est pas reçu par le serveur : </p> <pre class="brush:php;toolbar:false;">requêtes d'importation url='http://nesssi.cacr.caltech.edu/cgi-bin/getmulticonedb_release2.cgi/post' files={'files': open('file.txt','rb')} valeurs={'upload_file' : 'file.txt' , 'DB':'photcat' , 'OUT':'csv' , 'SHORT':'short'} r=requests.post(url,files=files,data=values)</pre> <p>J'ai renseigné la valeur du mot-clé 'upload_file' avec mon nom de fichier car si je le laissais vide, il apparaîtrait : </p> <pre class="brush:php;toolbar:false;">Erreur - Vous devez sélectionner un fichier à télécharger ! ≪/pré> <p>Maintenant, j'obtiens : </p> <pre class="brush:php;toolbar:false;">La taille du fichier file.txt est en octets, téléchargé avec succès ! Résultats du service de requête : il y a 0 ligne au total. ≪/pré> <p>Cela se produit uniquement si le fichier est vide. Je ne sais donc pas comment réussir à envoyer mon fichier. Je sais que le fichier est valide car si je remplis le formulaire manuellement et que je visite le site, il renvoie une belle liste de correspondances, ce qui correspond exactement à ce que je souhaite. J'apprécie vraiment tous les conseils. </p> <p>Quelques autres sujets liés (mais qui ne résolvent pas mon problème) : </p> <ul> <li>Utilisez un script Python pour envoyer des fichiers via POST</li> <li>http://docs.python-requests.org/en/latest/user/quickstart/#response-content</li> <li>Utiliser des requêtes pour télécharger des fichiers et envoyer des données supplémentaires</li> <li>http://docs.python-requests.org/en/latest/user/advanced/#body-content-workflow</li> </ul><p><br /></p>
P粉071559609P粉071559609508 Il y a quelques jours677

répondre à tous(2)je répondrai

  • P粉422227023

    P粉4222270232023-08-17 12:40:36

    (2018) La nouvelle bibliothèque de requêtes Python simplifie ce processus, nous pouvons utiliser la variable 'files' pour indiquer que nous voulons télécharger un fichier codé en plusieurs parties

    url = 'http://httpbin.org/post'
    files = {'file': open('report.xls', 'rb')}
    
    r = requests.post(url, files=files)
    r.text

    répondre
    0
  • P粉590428357

    P粉5904283572023-08-17 11:32:38

    Si upload_file fait référence à un fichier, utilisez :

    files = {'upload_file': open('file.txt','rb')}
    values = {'DB': 'photcat', 'OUT': 'csv', 'SHORT': 'short'}
    
    r = requests.post(url, files=files, data=values)

    Ensuite, requests enverra un corps de requête POST de formulaire en plusieurs parties avec les requests将发送一个多部分表单POST请求体,其中upload_file字段设置为file.txtchamps définis sur le contenu du fichier file.txt.

    Le nom du fichier sera inclus dans l'en-tête MIME du champ spécifique :

    >>> import requests
    >>> open('file.txt', 'wb')  # 创建一个空的演示文件
    <_io.BufferedWriter name='file.txt'>
    >>> files = {'upload_file': open('file.txt', 'rb')}
    >>> print(requests.Request('POST', 'http://example.com', files=files).prepare().body.decode('ascii'))
    --c226ce13d09842658ffbd31e0563c6bd
    Content-Disposition: form-data; name="upload_file"; filename="file.txt"
    
    
    --c226ce13d09842658ffbd31e0563c6bd--

    Veuillez faire attention aux filename="file.txt"paramètres.

    Si vous avez besoin de plus de contrôle, vous pouvez utiliser des tuples comme valeurs de filescarte, la longueur du tuple doit être comprise entre 2 et 4. Le premier élément est le nom du fichier, suivi du contenu, incluant éventuellement un mappage des en-têtes de type de contenu et d'autres en-têtes :

    files = {'upload_file': ('foobar.txt', open('file.txt','rb'), 'text/x-spam')}

    Cela définira un nom de fichier et un type de contenu alternatifs, en omettant les en-têtes facultatifs.

    Si vous souhaitez que l'intégralité du corps de la requête POST provienne d'un fichier (aucun autre champ n'est spécifié), n'utilisez pas le paramètre files参数,直接将文件作为data进行POST。您可能还希望设置一个Content-Type et POSTez le fichier directement en tant que données. Vous souhaiterez peut-être également définir un en-tête Content-Type, sinon aucun en-tête ne sera défini. Voir Requêtes Python - Données POST à ​​partir d'un fichier.

    répondre
    0
  • Annulerrépondre