Dans certains cas, il est nécessaire de générer par programmation le contenu d'une requête http. Dans le cas étudié, le site attend plusieurs fois le même paramètre avec une valeur différente.

 

Avec curl, cela se fait avec -f param=valeur -f param=valeur2. Les deux valeurs sont intégrées à la requête.

 

Voici un exemple de code permettant de générer le contenu :

 

 

CST_BOUNDARY est une chaîne= ";boundary="
GUIDdBoundary est une chaîne = DonneGUID(guidBrut)
sSéparateur est une chaîne = "----------------------------"
sFormulaire est une chaîne = "Content-Disposition: form-data; name=""%1"""+RC+RC+"%2"+RC

sData est une chaîne

 

maRequête est un httpRequête
maRequête.Méthode = httpPost
maRequête.ContentType = typeMimeFormulaireMultiPartie +CST_BOUNDARY+GUIDdBoundary
maRequête.URL ="https://api-monsite.fr/recherche/csv/"
// -F data=@search.csv
sData+=AjouteForm("data","@search.csv")
// -F columns=adresse
sData+=AjouteForm("colonne","nom")
// -F columns=postcode
sData+=AjouteForm("colonne","prenom")
// On ferme le formulaire
sData+=sSéparateur+GUIDdBoundary
maRequête..Contenu = sData


marep est un httpRéponse
marep = HTTPEnvoie(maRequête)

Info("Réponse du site :"+marep..Contenu)

 

 

 

PROCEDURE INTERNE AjouteForm(_Nom est une chaîne, _Valeur est une chaîne)
// Formate le contenu de la requête en Multipart.
RENVOYER sSéparateur+GUIDdBoundary+RC+ChaîneConstruit(sFormulaire,_Nom,_Valeur)
FIN

 

< Retour

5 commentaires

Jérémie G
13/04/2021 - 08:48 - Répondre
Bonjour, J'ai essayé d'utiliser ce code et j'ai rencontré quelques difficultés. Je mets à disposition le code final qui fonctionne chez moi : sToken est une chaîne = sFonctionRécupérantUnToken() sSéparateur_Boundary est une chaîne = DonneGUID(guidBrut) // Requête HTTP avec token httpReq_WS est un httpRequête httpReq_WS..Méthode = httpPost // On prend en priorité le SafeNumber plus fiable httpReq_WS..URL = cst_Piloting_URL_WS+"/addzone" httpReq_WS..ContentType = "multipart/form-data; boundary="+sSéparateur_Boundary httpReq_WS.Entête["Authorization"] = "Bearer "+sToken sContenuReq est une chaîne sContenuReq+=[RC]+AjouteFormData(sSéparateur_Boundary,"Parametre1",sValeurParam1) sContenuReq+=[RC]+AjouteFormData(sSéparateur_Boundary,"Parametre2",sValeurParam2) sContenuReq+=[RC]+AjouteFormData(sSéparateur_Boundary,"Parametre3",sValeurParam3) // On ferme le formulaire (Il faut absolument les 2 tirets en fin de chaine) sContenuReq+=[RC]+"--"+sSéparateur_Boundary+"--" httpReq_WS..Contenu = sContenuReq httpRep_WS est un httpRéponse = HTTPEnvoie(httpReq_WS) // Si Requête traitée avec succès SI httpRep_WS..CodeEtat = 200 ALORS // Récupération résultat en JSON soit json_Résultat = JSONVersVariant(httpRep_WS..Contenu) .... FIN PROCÉDURE INTERNE AjouteFormData(sBoundary_P est une chaîne, LOCAL sNomParam_P est une chaîne, LOCAL sNomValeur_P est une chaîne) // Formate le contenu de la requête en Multipart. // Il faut que la ligne commence par -- sParamètre est une chaîne = [ --%1 Content-Disposition: form-data; name="%2" %3 ] RENVOYER ChaîneConstruit(sParamètre,sBoundary_P,sNomParam_P, sNomValeur_P)

lemoine
18/06/2021 - 16:37 - Répondre
commentaire illisible sans les retours chariot.

tisha
22/06/2021 - 10:21 - Répondre
sToken est une chaîne = sFonctionRécupérantUnToken() sSéparateur_Boundary est une chaîne = DonneGUID(guidBrut) // Requête HTTP avec token httpReq_WS est un httpRequête httpReq_WS..Méthode = httpPost // On prend en priorité le SafeNumber plus fiable httpReq_WS..URL = cst_Piloting_URL_WS+"/addzone" httpReq_WS..ContentType = "multipart/form-data; boundary="+sSéparateur_Boundary httpReq_WS.Entête["Authorization"] = "Bearer "+sToken sContenuReq est une chaîne sContenuReq+=[RC]+AjouteFormData(sSéparateur_Boundary,"Parametre1",sValeurParam1) sContenuReq+=[RC]+AjouteFormData(sSéparateur_Boundary,"Parametre2",sValeurParam2) sContenuReq+=[RC]+AjouteFormData(sSéparateur_Boundary,"Parametre3",sValeurParam3) // On ferme le formulaire (Il faut absolument les 2 tirets en fin de chaine) sContenuReq+=[RC]+"--"+sSéparateur_Boundary+"--" httpReq_WS..Contenu = sContenuReq httpRep_WS est un httpRéponse = HTTPEnvoie(httpReq_WS) // Si Requête traitée avec succès SI httpRep_WS..CodeEtat = 200 ALORS // Récupération résultat en JSON soit json_Résultat = JSONVersVariant(httpRep_WS..Contenu) FIN PROCÉDURE INTERNE AjouteFormData(sBoundary_P est une chaîne, LOCAL sNomParam_P est une chaîne, LOCAL sNomValeur_P est une chaîne) // Formate le contenu de la requête en Multipart. // Il faut que la ligne commence par -- sParamètre est une chaîne = [ --%1 Content-Disposition: form-data; name="%2" %3 ] RENVOYER ChaîneConstruit(sParamètre,sBoundary_P,sNomParam_P, sNomValeur_P)

Aser Dipanda
11/10/2021 - 22:52 - Répondre
Si vous voulez envoyer des fichier utilisez plutôt cette fonction PROCÉDURE INTERNE AjouteFichier(_NomParametre chaîne, _Fichier chaîne) sFormulaireFile est une chaîne = "Content-Disposition: form-data; name=""%1""; filename=""%2""" +RC+RC+"%3"+RC RENVOYER "--"+GUIDdBoundary+RC+ChaîneConstruit(sFormulaireFile, _NomParametre, fExtraitChemin(_Fichier, fFichier + fExtension), fChargeBuffer(_Fichier)) FIN

wcv
11/10/2021 - 22:56 - Répondre
CST_BOUNDARY est une chaîne= ";boundary="
GUIDdBoundary est une chaîne = DonneGUID(guidBrut)
sSéparateur est une chaîne = "----------------------------"
sFormulaire est une chaîne = "Content-Disposition: form-data; name=""%1"""+RC+RC+"%2"+RC

Publier un commentaire : 
Votre adresse email ne sera pas publiée