|
GRUPOS DE DISCUSSÃO PROFISSIONAL WINDEV, WEBDEV e WINDEV Mobile |
| | | | | |
Envoyer un fichier avec API Rest |
Iniciado por Karine Houbrix, ago., 06 2020 5:10 PM - 12 respostas |
| |
| | | |
|
| |
Publicado em agosto, 06 2020 - 5:10 PM |
Bonjour à tous, Ca fait des heures que je suis sur ce problème et je ne trouve aucune solution. J'utilise l'api Rest pour discuter avec Jira (Atlassian) et j'aimerais joindre un fichier sur une "issue" Voilà leur doc : curl -D- -u admin:admin -X POST -H "X-Atlassian-Token: no-check" -F "file=@myfile.txt" https://your-domain.atlassian.net/rest/api/2/issue/TEST-123/attachments
Voilà mon code actuellement (où il manque la partie d'envoi de fichier du coup) :
MaReq.URL = "https://karinehoubrix.atlassian.net/rest/api/2/issue/SYN-46/attachments" MaReq.Header["Authorization"] = "Basic aG91YnJpeC5rYXJpbmVAZ21haWwuY29tOkRyaVl2UWRBZDlHR2RzYTRlZ2Q2MEMwNg==" MaReq.Header["Accept"] = "application\json" MaReq.Header["X-Atlassian-Token"] = "no-check" MaReq.ContentType = "multipart/form-data; boundary= simple boundary" MaReq.Method = httpPost
Reponse = RESTSend(MaReq)
IF ErrorOccurred THEN Error(ErrorInfo(errFullDetails)) ELSE Info(Reponse.CodeEtat) END
Et pour finir, j'ai testé ma requête sur Postman qui fonctionne sans soucis et en récupérant le code, je vois qu'il faudrait que j'implémente cette ligne en Windev :
Content-Disposition: form-data; name="file"; filename="/C:/Users/karine.houbrix/Pictures/test.png"
Ce qui donne ce résultat en JSON :
{ "self": "https://karinehoubrix.atlassian.net/rest/api/2/attachment/10003", "id": "10003", "filename": "test.png", "author": { "self": "https://karinehoubrix.atlassian.net/rest/api/2/user?accountId=5aa6b07d4712c13220b775a7", "accountId": "5aa6b07d4712c13220b775a7", "emailAddress": "houbrix.karine@gmail.com", "avatarUrls": { "48x48": "https://secure.gravatar.com/avatar/e647b953c8ca119c52d033ce5cd6fbdd?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FKH-4.png", "24x24": "https://secure.gravatar.com/avatar/e647b953c8ca119c52d033ce5cd6fbdd?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FKH-4.png", "16x16": "https://secure.gravatar.com/avatar/e647b953c8ca119c52d033ce5cd6fbdd?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FKH-4.png", "32x32": "https://secure.gravatar.com/avatar/e647b953c8ca119c52d033ce5cd6fbdd?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FKH-4.png" }, "displayName": "Karine Houbrix", "active": true, "timeZone": "Europe/Brussels", "accountType": "atlassian" }, "created": "2020-08-06T16:47:19.927+0200", "size": 234148, "mimeType": "image/png", "content": "https://karinehoubrix.atlassian.net/secure/attachment/10003/test.png", "thumbnail": "https://karinehoubrix.atlassian.net/secure/thumbnail/10003/test.png" }
Donc quel est la commande en WinDev pour arriver au même résultat ? Merci ! |
| |
| |
| | | |
|
| | |
| |
Membro registado 5 mensagems |
|
Publicado em agosto, 07 2020 - 9:30 AM |
| |
| |
| | | |
|
| | |
| |
Membro registado 160 mensagems Popularité : +18 (22 votes) |
|
Publicado em agosto, 07 2020 - 10:42 AM |
bufFichier est un Buffer
bufFichier=fChargeBuffer("Chemin de ton fichier ") MaReq.Contenu=bufFichier |
| |
| |
| | | |
|
| | |
| |
Membro registado 5 mensagems |
|
Publicado em agosto, 10 2020 - 10:44 AM |
Merci beaucoup pour ta réponse mais j'ai une erreur 400 en faisant ça... Tu sais à quoi c'est dû ? |
| |
| |
| | | |
|
| | |
| |
Membro registado 160 mensagems Popularité : +18 (22 votes) |
|
Publicado em agosto, 10 2020 - 11:11 AM |
essaye ça MaReq.ContentType= "application/x-www-form-urlencoded". |
| |
| |
| | | |
|
| | |
| |
Membro registado 123 mensagems Popularité : +7 (9 votes) |
|
Publicado em agosto, 10 2020 - 11:14 AM |
Hi Karine,
I guess you need to add this to the http request header. so:
MaReq.Header["Content-Disposition"]=form-Data; name="file"; filename="C:/Users/karine.houbrix/Pictures/test.png"
My 2 cents
-- Peter Holemans www.mcs2.eu www.pixontri.eu |
| |
| |
| | | |
|
| | |
| |
Membro registado 5 mensagems |
|
Publicado em agosto, 10 2020 - 2:04 PM |
freak per a écrit :
essaye ça MaReq.ContentType= "application/x-www-form-urlencoded".
Toujours une erreur 400...
Peter Holemans (BE) a écrit :
Hi Karine, I guess you need to add this to the http request header. so: MaReq.Header["Content-Disposition"]=form-data; name="file"; filename="C:/Users/karine.houbrix/Pictures/test.png" My 2 cents -- Peter Holemans www.mcs2.euwww.pixontri.eu
Always try but always the same response "Error 400" ... |
| |
| |
| | | |
|
| | |
| |
Membro registado 123 mensagems Popularité : +7 (9 votes) |
|
Publicado em agosto, 10 2020 - 2:44 PM |
Bonjour,
HTTP réponse 400 = Bad Request Donc plusieurs options: - Formattage du request (HTTP Header / Ou contenu json p.e. un numérique n'a pas de quotes, ...)
Si la même demande json fonctionne par PostMan il faut regarder peut-être l'authentification. Quelle est l'authentification que tu as utilisé avec PostMan? Aussi "Basic" comme dans ton exemple? Est-ce que l'encodage dans PostMan en Base64 est identique à l'encodage par WX quand tu vérifie la demande http envoyé à Jira? Souvent en mode Unicode il faut passer la chaine username:password transformé en ANSI d'abord dans l'encodage vers Base64.
Fais une comparaison dans notepad++ de la demande json et de la partie http entre PostMan et WX.
-- Peter Holemans www.mcs2.eu www.pixontri.eu |
| |
| |
| | | |
|
| | |
| |
Membro registado 5 mensagems |
|
Publicado em agosto, 10 2020 - 3:20 PM |
Peter Holemans (BE) a écrit :
Bonjour, HTTP réponse 400 = Bad Request Donc plusieurs options: - Formattage du request (HTTP Header / Ou contenu json p.e. un numérique n'a pas de quotes, ...) Si la même demande json fonctionne par PostMan il faut regarder peut-être l'authentification. Quelle est l'authentification que tu as utilisé avec PostMan? Aussi "Basic" comme dans ton exemple? Est-ce que l'encodage dans PostMan en Base64 est identique à l'encodage par WX quand tu vérifie la demande http envoyé à Jira? Souvent en mode Unicode il faut passer la chaine username:password transformé en ANSI d'abord dans l'encodage vers Base64. Fais une comparaison dans notepad++ de la demande json et de la partie http entre PostMan et WX. -- Peter Holemans www.mcs2.euwww.pixontri.eu
Je fais exactement la même chose dans PostMan et WinDev. D'ailleurs ce n'est pas ma première requête et les autres fonctionnent sans problème. Je ne peux même pas comparé les Json car ma réponse est complètement vide. Je n'ai d'ailleurs aucune description sur le problème juste "error 400" (J'ai même pas le Bad Request alors que si je fais une faute de frappe, je l'ai bien). Je crois que je vais passer par une requête HTTP et non Rest pour cette partie |
| |
| |
| | | |
|
| | |
| |
Membro registado 123 mensagems Popularité : +7 (9 votes) |
|
Publicado em agosto, 10 2020 - 6:45 PM |
MiniChupa a écrit :
Je fais exactement la même chose dans PostMan et WinDev. D'ailleurs ce n'est pas ma première requête et les autres fonctionnent sans problème. Je ne peux même pas comparé les Json car ma réponse est complètement vide. Je n'ai d'ailleurs aucune description sur le problème juste "error 400" (J'ai même pas le Bad Request alors que si je fais une faute de frappe, je l'ai bien). Je crois que je vais passer par une requête HTTP et non Rest pour cette partie
Rebonjour, Techniquement une requête REST est une simple requête HTTP (GET, POST, PUT, DELETE, ...) selon le mechanisme REST (REpresentational State Transition). Et quand je mentionne qu'il faut comparer les requêtes json entre PostMan et WX, je veux dire les contenus json à l'envoi, pas dans le retour.
Retour 400 est simplement le code de retour de la requête HTTP comme défini dans le protocole HTTP: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes Ici cela veut dire (note que normalement il doit être un explication en retour donc je crois qu'il y a un problème au niveau de l'entête http):
4xx Client errors This class of status code is intended for situations in which the error seems to have been caused by the client. Except when responding to a HEAD request, the server should include an entity containing an explanation of the error situation, and whether it is a temporary or permanent condition. These status codes are applicable to any request method. User agents should display any included entity to the user.[30] 400 Bad Request The server cannot or will not process the request due to an apparent client error (e.g., malformed request syntax, size too large, invalid request message framing, or deceptive request routing).
Pour y revenir, il y a un problème avec ta requête http (utilisant la méthodologie REST). Et si cela fonctionne dans PostMan, il faut donc analyser la différence à l'envoi (si le retour dans le body ne précise pas plus de détails). Il faut donc comparer le message HTTP (entête inclus) et le contenu (json) envoyé entre PostMan et WX.
Bonne chance !
-- Peter Holemans www.mcs2.eu www.pixontri.eu |
| |
| |
| | | |
|
| | |
| |
Publicado em agosto, 12 2020 - 3:13 PM |
Bonjour, Et pourquoi ne pas utiliser curl.exe directement? (inclus dans Windows). |
| |
| |
| | | |
|
| | |
| |
Membro registado 123 mensagems Popularité : +7 (9 votes) |
|
Publicado em maio, 04 2021 - 6:10 PM |
Hello Karine
As-tu pu résoudre ton challenge finalement? Toujours intéressé à ce qui provoquait le souci.
-- Peter Holemans www.mcs2.eu www.pixontri.eu |
| |
| |
| | | |
|
| | |
| |
Membro registado 123 mensagems Popularité : +7 (9 votes) |
|
Publicado em maio, 05 2021 - 9:37 AM |
Hello Karine
Après réflexion... J'avais une demande pareille il y a qq mois. Il faut utiliser le httpSendForm ce qui fonctionne pour ce que tu essaies de faire (envoyer des fichiers par REST). Ici un exemple pour envoyer deux fichiers par une requête REST...
... //Declare variables RESTRqst is restRequest RESTResp is restResponse MimeType is string FormName is string = GetGUID(guidRough) JSONFile is string = TMPFileDir+[fSep]+FormName+".json" ... //Create the form to send the files HTTPCreateForm(FormName) HTTPAddFile(FormName,"file",pFileName,MimeType) HTTPAddFile(FormName,"moAdd",JSONFile,typeMimeJSON) ... //Set REST Request Parameters and fill form fields RESTRqst..UserAgent = "Pixontri JDEdwards REST" //The content is sent as form-data RESTRqst..ContentType = typeMimeMultiPartForm //-->multipart/form-data //RESTRqst..Content = "" //-->no content -> form RESTRqst..Method = httpPost RESTRqst..URL = JDEEndPointURL+["/"]+pServiceURL RESTRqst..User = pUserName RESTRqst..Password = pUserPassword ... //Execute REST request RESTResp = HTTPSendForm(FormName,RESTRqst) //RestSend(RESTRqst)
//Server was reachable? IF NOT ErrorOccurred THEN ...
-- Peter Holemans www.mcs2.eu www.pixontri.eu |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|