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

EDI, CMS, Outils, Scripts et API PHP Discussion :

Online-Convert api - post request php


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 46
    Points : 50
    Points
    50
    Par défaut Online-Convert api - post request php
    Bonjour,

    J'essaie d'intégrer sur mon site de vente en ligne l'api de online-convert pour convertir des fichiers(principalement des images de mes produits) au format webp. Je veux que tout soit automatisé de la conversion au téléchargement directement dans le dossier spécifié de mon hébergeur.

    La doc lorsque l'on veut upload un fichier

    Donc je crée un un job (dont je précise la conversion à faire) mais sans "input" (joindre d'image), afin d'avoir l'objet en stand by et apporter des modifications plus tard (vous comprendrez lesquelles). Ceci fonctionne !
    Ensuite vient le moment où je dois ajouter les images (input) à mon job et pour ça dans la doc il est dit que je dois faire ça via un post request.

    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
     
    $options = array(
    	'http' => array(
    		'header'  => array(
    			"Content-type: multipart/form-data",
    			"Cache-Control: no-cache",
    			"x-oc-api-key: <API KEY>",
    			"x-oc-upload-uuid: <RANDOM UUID>",
    		),
    		'method'  => 'POST',
    		'content' => $FILES['file'],
    	),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);
    var_dump($result);
    Là je reçois un jolie : Warning: file_get_contents(http://www48.online-convert.com/dl/w...0f6cbe4592be): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request

    Je n'ai jamais fait de post request en php (sans curl) j'ai regardé pendant deux jours des tutos pour comprendre comment cela fonctionne et la je suis honnêtement perdu. Le pire c'est qu'à part ce message je n'ai aucune autre indication sur d'où pourrais venir le problème.

    Info à noter :
    - Faire un postFullJob ( c-a-d envoyer tout d'un coup : les inputs, la conversion à faire...) marche parfaitement. Le problème c'est que le nom du fichier est tout bizarre lorsqu'il est télécharger et placé dans le dossier que je lui ai indiqué.
    - Définir un nom à mon image avant de le télécharger fonctionne quand l'image que je lui fourni viens directement d'une url et non en local.
    - Faire ce que je souhaite via ajax... ça fonctionne. Mais je souhaite uniquement en php et je suis sûr que c'est possible.
    - J'ai tenté de faire des test via postman mais sans succés j'ai toujours la même erreur : 99 impossible d'upload l'image.


    Donc voilà j'aimerai que quelqu'un me guide et m'explique qu'est ce qui ne vas pas avec mon post request et pourquoi leur maudit serveur ne veux pas accepter mon post request.
    Je veux faire ça en php sans curl sans ajax car apparemment c'est possible et quand je teste un truc qui ne marche pas je veux savoir la fond de cette histoire. C'est comme un film sauf que là je me tape la tête contre le mur en plus

    Merci par avance de votre aide cordialement. Haamome

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Ta requête fonctionne , puisque le serveur te répond un code d'erreur 400.

    Ca veux en revanche dire que ta requête est probablement mal formatée ou qu'il lui manque quelque chose.
    Tu n'as pas d'autres retour qu' un code 400 ? Rien dans le body qui pourrais t'orienter ?

    Dans la doc on peut lire :
    The field file is where you put the contents of the file you want to send
    Or dans ta requête je ne vois pas de champs "file" dans le corps du post

    A mon avis il manque quelque chose dans ce style :

    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
    $postdata = http_build_query(
        array(
            'file' => $_FILE['file']
        )
    );
     
    $options = array(
    	'http' => array(
    		'header'  => array(
    			"Content-type: multipart/form-data",
    			"Cache-Control: no-cache",
    			"x-oc-api-key: <API KEY>",
    			"x-oc-upload-uuid: <RANDOM UUID>",
    		),
    		'method'  => 'POST',
    		'content' => $postdata,
    	),
    );
    Note au passage que PHP à tout ce qu'il faut pour que tu puisses faire les conversion toi même.

    Une truc comme ca devrait marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $source = 'icone.jpg';
    $dest = 'icone.webp';
    $img = imagecreatefromjpeg($source);
    imagewebp($img, $dest, 100);
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 46
    Points : 50
    Points
    50
    Par défaut
    Bonjour,

    J'avais déjà testé avec le http_build_query() mais sans succès. Dans la doc il parle de field "file" je pensais que c'était le champ qui a pour type file qu'il fallait le mettre dans la clé "content" de mon post request.
    En tout les cas j'ai testé ça en foutant $_FILES['file'] dans un tableau + http_build_query() et toujours le même problème.

    Le body malheureusement je n'ai rien d'autre que ce que j'ai déjà posté:
    Warning: file_get_contents(http://www9.online-convert.com/dl/we...ddd37460d785): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request
    En faisant un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    get_headers($url, false, $context);
    bool(false) array(9) { [0]=> string(24) "HTTP/1.1 400 Bad Request" [1]=> string(13) "Server: nginx" [2]=> string(30) "Content-Type: application/json" [3]=> string(17) "Connection: close" [4]=> string(23) "X-Powered-By: PHP/7.4.3" [5]=> string(39) "Cache-Control: private, must-revalidate" [6]=> string(35) "Date: Wed, 01 Apr 2020 08:56:39 GMT" [7]=> string(16) "pragma: no-cache" [8]=> string(11) "expires: -1" }
    Mais je doute que cela soit vraiment utile.

    Je vais voir pour le lien que tu m'as donné. Le souci c'est que il y aura parfois des vidéos qui devront être converti. L'avantage avec cette api est qu'il fait tout les formats et tout les types de fichiers. Cordialement

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Dans le lien de la doc que tu as donné , tu as l'exemple de requête.
    Donc il faut regarder la requête que tu envois (via wireshark par exemple) et voir ce qui est différent par rapport à ce qu'il attendent sachant que tu peux omettre la partie qui concerne "decrypt_password".

    Ils ont à priori un sdk disponible en php : https://github.com/onlineconvert/onl...rt-api-sdk-php
    Tu peux éventuellement y trouver comment effectuer ta requête (ou simplement l'utiliser)
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 46
    Points : 50
    Points
    50
    Par défaut
    Oui j'ai bien vu l'exemple (mais il est en curl) et traduire ça sous php simple c'est incompréhensible pour moi. Mais j'ai essayé plus de 100 méthodes différentes sans succès pour preuve j'ai atteint ma limite de request au serveur, j'ai créer un deuxième compte pour avoir une deuxième API Key et faire de nouveau test

    Oui j'ai bien vu qu'ils avaient un sdk sur github, c'est pour cela que j'ai dit en ajax ça fonctionne. Quand au code php c'est l'exemple qui montre comment le faire en mode Remote (c-a-d en utilisant une image venant d'internet).

    Le problème c'est que j'aimerai comprendre pourquoi je n'y arrive pas en php quand je veux upload une image. C'est quand même fou pour faire une request post y a que 4 lignes et pourtant je galère autant. Faut que je trouve !!

    En tout les cas merci pour wireshark je n'y avais pas pensé. Je vais me pencher dessus, apprendre comment on s'en sert et espère trouver mon erreur.

    Je reviendrai sur ce forum pour poster la solution. Codialement


    Bon finalement j'ai eu une réponse de la part du CEO: Jens-Peter Bierkandt
    Qui m'a gentiment expliqué que leur api ne disposait pas de la fonctionnalité pour renommé le fichier quand ce dernier était upload (mais uniquement en remote) d'où le bad request 400 sans aucune indication supplémentaire.

    Donc ça va ça ne venait pas de moi (j'ai même failli me remettre en question sur mes compétences en php). Merci à toi grunk pour ton aide et cette outils il va me servir énormément dans mes futurs projets. Cordialement

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

Discussions similaires

  1. Equivalent de l'array POST / GET / REQUEST PHP en Java ?
    Par sjachym dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 04/05/2012, 19h05
  2. Appel d'une page avec la methode POST depuis php
    Par QuantuX dans le forum Langage
    Réponses: 9
    Dernier message: 04/08/2006, 12h45
  3. Découper un code HTML qui demande un post vers PHP
    Par Liondd dans le forum Langage
    Réponses: 6
    Dernier message: 22/04/2006, 03h15
  4. Comment exécuter une API windows via php ?
    Par mikemead dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 31/03/2006, 10h19

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