IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

API problème requests post api [Python 3.X]


Sujet :

Réseau/Web Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2020
    Messages : 16
    Points : 9
    Points
    9
    Par défaut API problème requests post api
    Bonjour à tous je suis nouveau sur le forum et débutant en informatique

    Je dois effectuer une requête post pour envoyer un fichier csv dans une api
    J'ai regardé les méthodes et donc créer le header le body de ma requête etc..
    Cependant lors que j'exécute ma requête, j'ai un retour pour me dire que ma requête n'est pas bonne et qu'il n'y a pas de fichier ni de nom de fichier or j'ai précisé cela dans le body
    Veuillez voir mon code ci dessous

    En vous remerciant par avance pour votre aide

    Nom : erreur.png
Affichages : 55
Taille : 71,5 Ko


    message de la console en bas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    400
    {'name_file': ['Ce champ est obligatoire.'], 'initial_path': ["Aucun fichier n'a été soumis."]}

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    17 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 17 685
    Points : 30 524
    Points
    30 524
    Par défaut
    Salut,

    Citation Envoyé par benji1996 Voir le message
    Je dois effectuer une requête post pour envoyer un fichier csv dans une api
    C'est l'API qui documente quoi remplir...
    Si elle répond j'ai pas trouvé ce que je veux, il faut relire la documentation, trouver un exemple (et si vous voulez qu'on s'y colle, il faudrait déjà savoir quelle API est utilisée).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2020
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    C'est l'API qui documente quoi remplir...
    Si elle répond j'ai pas trouvé ce que je veux, il faut relire la documentation, trouver un exemple (et si vous voulez qu'on s'y colle, il faudrait déjà savoir quelle API est utilisée).

    - W

    Tout d'abord merci pour votre réponse,

    Le problème étant que cette api est en cours de développement il n'y a donc pas encore de documentation précise dessus,
    Cependant quand j'exécute la même requête de test dans postman avec le même fichier cela fonctionne code 201

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    17 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 17 685
    Points : 30 524
    Points
    30 524
    Par défaut
    Salut,

    Citation Envoyé par benji1996 Voir le message
    Cependant quand j'exécute la même requête de test dans postman avec le même fichier cela fonctionne code 201
    Je ne suis pas sûr que cela suffise pour arriver à vous aider.... mais d'autres seront peut être plus perspicaces.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    1 983
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 983
    Points : 5 016
    Points
    5 016
    Par défaut
    hello,
    ma boule de cristal n'a pas assez d'éléments pour deviner d'où vient le problème (on ne voit pas le header). Il faudrait que tu nous mettes le code complet et si possible pas dans une copie d'écran mais en texte à l'intérieur d'une balise code (bouton #).
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2020
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Bonjour J.P

    C'est bien comme ca que tu souhaites voir le code ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    header_token = {
            "Content-type": "multipart/form-data",
            "Authorization": "token {}".format(token),
     
        }
     
        body_post = {
            "type_file": "csv",
            "type_file_out": False,
            "separator": ",",
            "header": True,
            "sheet_anonym[0]columns[0]": "feuille",
            "sheet_anonym[0]sheet": "TEST1",
            "name_file": "TEST1.csv",
            "initial_path": 'Desktop/Societe-DAN-1/test_csv/TEST1.csv'
        }
     
        with open('Desktop/Societe-DAN-1/test_csv/TEST1.csv', "rb") as a_file:
            file_dict = {'initial_path': 'Desktop/Societe-DAN-1/test_csv/TEST1.csv'}
     
     
     
        req = requests.post(url, headers=header_token, files=file_dict, data=body_post, verify=False)
        print(req.status_code)
        print(req.json())

  7. #7
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    1 983
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 983
    Points : 5 016
    Points
    5 016
    Par défaut
    hello,
    le bouton # c'est celui qui se trouve en deuxième ligne à droite en haut de l'éditeur il génère des balises CODE et on met son code à l'intérieur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    header_token = {
    "Content-type": "multipart/form-data",
    "Authorization": "token {}".format(token),
    
    }
    
    body_post = {
    "type_file": "csv",
    "type_file_out": False,
    "separator": ",",
    "header": True,
    "sheet_anonym[0]columns[0]": "feuille",
    "sheet_anonym[0]sheet": "TEST1",
    "name_file": "TEST1.csv",
    "initial_path": 'Desktop/Societe-DAN-1/test_csv/TEST1.csv'
    }
    
    with open('Desktop/Societe-DAN-1/test_csv/TEST1.csv', "rb") as a_file:
    file_dict = {'initial_path': 'Desktop/Societe-DAN-1/test_csv/TEST1.csv'}
    
    
    
    req = requests.post(url, headers=header_token, files=file_dict, data=body_post, verify=False)
    print(req.status_code)
    print(req.json())
    Je ne suis pas spécialiste de requêtes POST mais tu peux essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    header_token = {
    "Content-Type": "application/json",
    "Authorization": "token {}".format(token),
    }
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2020
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Jai essayé avec ton application/json cela ne fonctionne va cependant j'ai récuperer de la documentation dessus

    Body :

    name_file: ressource
    initial_path: “fichier”
    type_file: ‘csv’
    type_file_out: false
    separator: ","
    header: true
    sheet_sample[0]sheet: ressource1
    sheet_sample[0]row_limit: 14
    sheet_sample[0]type_sampling: true

    donc je retape ma requête et toujours le même soucis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    header_token = {
            "Content-type": "multipart/form-data",
            "Authorization": "token {}".format(token)
     
        }
        body_post = {
            "name_file": "TEST1.csv",
            "initial_path": "C:/Users/benji/Desktop/Societe-DAN-1/test_csv/TEST1.csv",
            "type_file": "csv",
            "type_file_out": False,
            "separator": ",",
            "header": True,
            "sheet_sample[0]sheet": "TEST1",
            "sheet_sample[0]row_limit": 15,
            "sheet_sample[0]type_sampling": True,
     
        }
     
        with open('C:/Users/benji/Desktop/Societe-DAN-1/test_csv/TEST1.csv', "rb") as a_file:
            file_dict = {'initial_path': 'C:/Users/benji/Desktop/Societe-DAN-1/test_csv/TEST1.csv'}
     
        # files = {'initial_path': ('C:/Users/benji/Desktop/SocieteDAN-1/test_csv/TEST1.csv',
        # open('C:/Users/benji/Desktop/SocieteDAN-1/test_csv/TEST1.csv', 'rb'), 'text/csv')}
     
        req = requests.post(url, headers=header_token, data=body_post)
        print(req.status_code)
        print(req.json())

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2020
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    C'est l'API qui documente quoi remplir...
    Si elle répond j'ai pas trouvé ce que je veux, il faut relire la documentation, trouver un exemple (et si vous voulez qu'on s'y colle, il faudrait déjà savoir quelle API est utilisée).

    - W
    voici la documentation sur la requête que je dois effectué



    /api/sample/


    Requête

    Média supportés
    content-type : multipart/form-data
    authorization : token :...
    Body
    name_file: string
    initial_path: string
    type_file: string
    type_file_out: string
    sheet_sample[0]sheet: string
    sheet_sample[0]row_limit: int
    sheet_sample[0]type_sampling: bool

  10. #10
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    1 983
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 983
    Points : 5 016
    Points
    5 016
    Par défaut
    Citation Envoyé par benji1996 Voir le message
    Jai essayé avec ton application/json cela ne fonctionne va cependant j'ai récuperer de la documentation dessus
    Essaie de ne pas mettre le content-type dans le header :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header_token = {"Authorization": "token {}".format(token),
    }

    y-a-t-il un message d'erreur ?
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2020
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    Essaie de ne pas mettre le content-type dans le header :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header_token = {"Authorization": "token {}".format(token),
    }

    y-a-t-il un message d'erreur ?

    oui il y a toujours une erreur mais différente

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    400
    {'initial_path': ["La donnée soumise n'est pas un fichier. Vérifiez le type d'encodage du formulaire."]}

  12. #12
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    1 983
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 983
    Points : 5 016
    Points
    5 016
    Par défaut
    Peux-tu remontrer ton code complet car on dirait que tu as enlevé des choses dans ta requête dont le files=file_dict


    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2020
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    Peux-tu remontrer ton code complet car on dirait que tu as enlevé des choses dans ta requête dont le files=file_dict



    effectivement je l'ai retiré car dans la documentation il est dit qu'il faut seulement un body et un header
    j'ai donc retiré "files" qui me semblait inutile car dans mon body j'envoi le chemin du fichier à aller chercher

    mon code ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    header_token = {
            "Content-type": "multipart/form-data",
            "Authorization": "token {}".format(token)
     
        }
        body_post = {
            "name_file": "TEST1.csv",
            "initial_path": "/test_csv/TEST1.csv",
            "type_file": "csv",
            "type_file_out": False,
            "separator": ";",
            "header": True,
            "sheet_sample[0]sheet": "TEST1",
            "sheet_sample[0]row_limit": 10,
            "sheet_sample[0]type_sampling": False,
     
        }
     
     
        req = requests.post(url, headers=header_token, data=body_post)
        print(req.status_code)
        print(req.json())

  14. #14
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    1 983
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 983
    Points : 5 016
    Points
    5 016
    Par défaut
    hello,
    Citation Envoyé par benji1996 Voir le message
    Le problème étant que cette api est en cours de développement il n'y a donc pas encore de documentation précise dessus,
    Cependant quand j'exécute la même requête de test dans postman avec le même fichier cela fonctionne code 201
    Quand tu fais ta requête dans Postman mets-tu le paramètre files ?
    Quels sont les paramètres que tu mets dans Postman ?

    Citation Envoyé par benji1996 Voir le message
    effectivement je l'ai retiré car dans la documentation il est dit qu'il faut seulement un body et un header
    j'ai donc retiré "files" qui me semblait inutile car dans mon body j'envoi le chemin du fichier à aller chercher
    c'est bizarre car tu fais un envoi de fichier, ce n'est pas courant de voir un serveur API aller chercher le fichier. Il faut dans ce cas que le serveur API soit sur la même machine que celle où l'on fait la requête.
    Le paramètre initial_path ne serait-il pas le chemin où se trouve le fichier et pas le fichier ?

    Je ne peux pas plus t'aider. Il faudrait voir le code du serveur API pour voir ce qu'il attend et ce qu'il fait. Sinon c'est très difficile de deviner.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2020
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    effectivement donc la doc il n'y a pas mentionner le paramètre "files" dans la requête voila pourquoi je l'ai supprimé cependant j'ai téléchargé le code en python depuis postman j'ai donc fait un copié collé de la requête qui fonctionne la voici
    Quand je l'a met dans mon ide pour refaire la requête toujours le même soucis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    import requests
     
    url = "http://***/api/sample/"
     
    payload = {'name_file': 'TEST1.csv',
    'sheet_sample[0]sheet': 'TEST1',
    'sheet_sample[0]row_limit': '10',
    'type_file_out': 'False',
    'separator': ';',
    'header': 'true',
    'sheet_sample[0]type_sampling': 'False',
    'type_file': 'csv'}
    files = [
      ('initial_path', open('/E:/TEST1.csv','rb'))
    ]
    headers = {
      'Content-Type': 'multipart/form-data',
      'Authorization': 'token ....'
    }
     
    response = requests.request("POST", url, headers=headers, data = payload, files = files)

  16. #16
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    1 983
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 983
    Points : 5 016
    Points
    5 016
    Par défaut
    hello,
    Citation Envoyé par benji1996 Voir le message
    Quand je l'a met dans mon ide pour refaire la requête toujours le même soucis
    Quand il y a un souci, il faut nous indiquer lequel même si cela a déjà été dit : message d'erreur (lequel), plantage, mauvais résultat etc...
    Je ne peux plus faire grand chose pour toi n'ayant pas accès à l'api. Le seul moyen de t'en sortir c'est de demander au développeur de l'api qu'est-ce qui n'est pas bon dans les paramètres que tu transmets dans ton script python.
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2020
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello,

    Quand il y a un souci, il faut nous indiquer lequel même si cela a déjà été dit : message d'erreur (lequel), plantage, mauvais résultat etc...
    Je ne peux plus faire grand chose pour toi n'ayant pas accès à l'api. Le seul moyen de t'en sortir c'est de demander au développeur de l'api qu'est-ce qui n'est pas bon dans les paramètres que tu transmets dans ton script python.
    Ami calmant, J.P
    effectivement c'est les dev de l'api qui vont prendre le relai sur ce sujet
    Je vous remercies pour vos réponses

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Problème de post AngularJS , C# web api
    Par aobmilan dans le forum ASP.NET Ajax
    Réponses: 2
    Dernier message: 24/03/2016, 11h18
  2. Problème Requête POST avec module Request
    Par Lerenn dans le forum Réseau/Web
    Réponses: 0
    Dernier message: 09/05/2013, 00h00
  3. Problème Methode POST
    Par nguthans dans le forum Langage
    Réponses: 3
    Dernier message: 13/01/2006, 20h28
  4. Problème methode POST
    Par raptor70 dans le forum Langage
    Réponses: 18
    Dernier message: 24/10/2005, 10h57
  5. [HTTPS] Problème de Post et Get avec Apache et SSL
    Par bartrik dans le forum Apache
    Réponses: 5
    Dernier message: 17/09/2004, 08h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo