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/"
sData+=AjouteForm("data","@search.csv")
sData+=AjouteForm("colonne","nom")
sData+=AjouteForm("colonne","prenom")
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) 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 - En attente de modération 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 - En attente de modération commentaire illisible sans les retours chariot. |
|
| |
| | tisha 22/06/2021 - 10:21 - Répondre - En attente de modération 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 - En attente de modération 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 - En attente de modération 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
|
|
| |
| |
|
| |
|