[RESOLU] Communiquer avec un formulaire HTTP
[RESOLU] Communiquer avec un formulaire HTTP
Bonjour et bonne année
Je désire envoyer par le formulaire suivant avec un fichier puis valider mais je bloque sur le codage.
https://www.escrime-info.com/gregxml/Greg/envoyer.php
Après lecture du source le html/javascript on trouve le lien "https://www.escrime-info.com/gregxml/Gr ... p?fichier=" mais le fichier doit certainement être dans un cache ???
Je ne vois pas comment injecter le fichier en pure basic.
Pouvez-vous me fournir une piste.
Bien cordialement
Je désire envoyer par le formulaire suivant avec un fichier puis valider mais je bloque sur le codage.
https://www.escrime-info.com/gregxml/Greg/envoyer.php
Après lecture du source le html/javascript on trouve le lien "https://www.escrime-info.com/gregxml/Gr ... p?fichier=" mais le fichier doit certainement être dans un cache ???
Je ne vois pas comment injecter le fichier en pure basic.
Pouvez-vous me fournir une piste.
Bien cordialement
Dernière modification par Bmld76 le jeu. 19/janv./2023 13:18, modifié 2 fois.
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Communiquer avec un formulaire
Si j'ai bien compris tu souhaites envoyer un fichier à un formulaire en ligne.
Regarde la fonction httprequest()
https://www.purebasic.com/french/docume ... quest.html
Regarde la fonction httprequest()

Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Communiquer avec un formulaire
Bonsoir,
Oui, c'est ca et je suis en train de voir cette fonction, mais il y a du javascript et je ne sais pas si il est possible d'utiliser Httprequest dans ce cas.
Oui, c'est ca et je suis en train de voir cette fonction, mais il y a du javascript et je ne sais pas si il est possible d'utiliser Httprequest dans ce cas.
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Communiquer avec un formulaire
Le fichier que tu utilises avec HTTPRequest est ton script php https://www.escrime-info.com/gregxml/Greg/envoyer.php
Je ne vois pas trop ou est le souci et quand intervient ton script Javascript.
Je ne vois pas trop ou est le souci et quand intervient ton script Javascript.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Communiquer avec un formulaire
La selection de fichier est du javascript et nom un formulaire html .
<script language="javaScript">function envoi(){document.PosterFichier.action="./envoyer.php?fichier="+document.PosterFichier.ficXML.value;document.PosterFichier.submit();}</script>
<script language="javaScript">function envoi(){document.PosterFichier.action="./envoyer.php?fichier="+document.PosterFichier.ficXML.value;document.PosterFichier.submit();}</script>
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Communiquer avec un formulaire
Tu peux essayer ce code ?
Code : Tout sélectionner
EnableExplicit
Define url.s = "https://www.escrime-info.com/gregxml/Greg/envoyer.php?fichier="
Define fileName.s
Define *buffer, size
InitNetwork()
;// Le fichier étant bidon tu verras une erreur dans le débug
fileName = "test.xml"
*Buffer = ReceiveHTTPMemory(url + fileName)
If *Buffer
size = MemorySize(*Buffer)
Debug "Résultat: " + PeekS(*Buffer, Size, #PB_UTF8|#PB_ByteLength)
FreeMemory(*Buffer)
Else
Debug "Ooops url non disponible"
EndIf
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Communiquer avec un formulaire
Merci, je vais tester ca.
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
Re: Communiquer avec un formulaire
Bonjour et merci du coup de main,
J'ai extrait la page (http://bmaillard.free.fr/greg/envoyer.php?fichier=) pour observer les paramètres transmis. Le fichier est transmit par la méthode "FILES"
get
Array
(
[fichier] => C:\\fakepath\\test.xml
)
files
Array
(
[ficXML] => Array
(
[name] => test.xml
[type] => text/xml
[tmp_name] => /mnt/108/sdb/e/e/bmaillard/phplw95c9
[error] => 0
[size] => 4319
)
)
J'ai testé ton code mais celui-ci passe le nom de fichier par la méthode "GET" et non par la méthode "FILES". Il faut que je trouve comment créer la structure qui implémente "FILES"
J'ai extrait la page (http://bmaillard.free.fr/greg/envoyer.php?fichier=) pour observer les paramètres transmis. Le fichier est transmit par la méthode "FILES"
get
Array
(
[fichier] => C:\\fakepath\\test.xml
)
files
Array
(
[ficXML] => Array
(
[name] => test.xml
[type] => text/xml
[tmp_name] => /mnt/108/sdb/e/e/bmaillard/phplw95c9
[error] => 0
[size] => 4319
)
)
J'ai testé ton code mais celui-ci passe le nom de fichier par la méthode "GET" et non par la méthode "FILES". Il faut que je trouve comment créer la structure qui implémente "FILES"
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
Re: Communiquer avec un formulaire
Bonjour,
J'ai trouvé un code qui correspondre à mon besoin. Mais j'ai une erreur 'accès memoire invalide' à la ligne SendNetworkData(conid,*Buffer,Len(POST$)). J'ai vérifié les pointeurs , ça à l'air correct. Pouvez vous m'aider sur ce point. Le code doit être exécutable tel quel même sans la présence du fichier test.xml.
J'ai trouvé un code qui correspondre à mon besoin. Mais j'ai une erreur 'accès memoire invalide' à la ligne SendNetworkData(conid,*Buffer,Len(POST$)). J'ai vérifié les pointeurs , ça à l'air correct. Pouvez vous m'aider sur ce point. Le code doit être exécutable tel quel même sans la présence du fichier test.xml.
Code : Tout sélectionner
;################################################################
;# 22/2/2006 - Upload file to web trough POST command | Pantcho #
;# Mar-19-2015 - update so it works on other systems? #
;# PB 5.31 x64 #
;################################################################
; CompilerIf #PB_Compiler_Unicode
; Debug "NO UNICODE FOR THIS ONE"
; End
; CompilerEndIf
;
EOL$ = Chr(13)+Chr(10)
QT$=Chr(34)
URL$ = "bmaillard.free.fr" ; the main domain "posttestserver.com" is a good test domain
PATH$ = "/greg/receive.php" ; /post.php works fine at "posttestserver.com" or what ever script that accepts the enctype="multipart/form-data"
Debug "repertoire actuel "+ GetCurrentDirectory()
FullFileName$ = "test.xml" ; Full path+filename, choose your own path
ActionName$ = "filesend" ; this is important!! this action must be the same as <form ... name="filesend">
Border$ = "232323RANDOMLETTERSNUMBERS23232" ; Border to the file data (Check RFC for more info)
; added an extra POST variable because sometimes you need this when you are posting like a security password etc.
; so the post on this will be "varnonumber" and the data will be "dataforvarnonumber 1" I called it varnonumber because "var2" would not work!!
FileHeader$ = "Content-Disposition: form-Data; name="+QT$+"varnonumber"+ QT$+EOL$+EOL$+"dataforvarnonumber 1"+EOL$+"--"+Border$+EOL$; Silly var names no numbers
FileHeader$ + "Content-Disposition: form-Data; name="+QT$+ActionName$ + QT$ +"; filename="+QT$+ FullFileName$+ QT$ +EOL$
FileHeader$ + "Content-Type: text/plain" ; <= Here change the content type regarding your file! (text,image etc...) we go on text
; ^^^ note: Havn't been tested with binary files.
If InitNetwork()
conid.l = OpenNetworkConnection(URL$,80)
If conid
Debug "Connected"
*Buffer = AllocateMemory(65000) ; some memory for our file buffer
POST$ = "POST "+ PATH$ +" HTTP/1.1"+#CRLF$+"Host: "+URL$+#CRLF$+"Accept: */*"+#CRLF$+"User-Agent: PureBasic/4.04 CFNetwork/711.1.16 Darwin/14.0.0" ; the Post command we are going to send to the server
OpenFile(1,FullFileName$)
Repeat
Text$ = ReadString(1)
FILE$ + EOL$+Text$
Until Eof(1)
; This is the border header for uploading
FILE$ = "--"+Border$ + EOL$ + FileHeader$ +EOL$ + FILE$ +EOL$+ "--" + Border$ + "--"
; Back to post, while sending header with the correct content length (border+file+border)
POST$ + EOL$ + "Content-Type: multipart/form-Data, boundary="+Border$ + EOL$ + "Content-Length: " + Str(Len(FILE$))
POST$ + EOL$ + EOL$ + FILE$
CloseFile(1)
;Debug POST$
;Debug "+++++++++++++++++++"
PokeS(*Buffer,"",0)
PokeS(*Buffer,POST$,Len(POST$))
Debug "§§§§§§§§§§§§§§§§§§§"
Debug conid
Debug "*******************"
Debug *Buffer
Debug PeekS(*Buffer)
Debug "*******************"
SendNetworkData(conid,*Buffer,Len(POST$))
;SendNetworkData(conid,*Buffer,100)
Repeat
Server$ = PeekS(*Buffer)
res.l = ReceiveNetworkData(conid, *Buffer, 1000)
Until Server$ = PeekS(*Buffer)
Debug Server$
Else
Debug "NO CONNECTION"
EndIf
Else
Debug "Pas de connexion"
EndIf
;filereceive.php
;// PHP sample file you could upload to a server. Name this filereceive.php and change PATH$="filereceive.php" on this PB program.
;// it is expecting ActionName$="filesend" from this PB Sample
;// all it does is take the temp file you sent and echo it back to you.
; <?PHP
; If (isset($_FILES['filesend']['error'])){echo "SEND ERROR";} //checks for errors
; If ($_FILES['filesend']['error'] == UPLOAD_ERR_OK //checks For errors
; && is_uploaded_file($_FILES['filesend']['tmp_name'])) { //checks that file is uploaded
; echo file_get_contents($_FILES['filesend']['tmp_name']); //SENDS FILE BACK TO YOU
; }
; //End TEST
; ?>
;// end of php sample
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
Re: Communiquer avec un formulaire
Quelques idées en vrac :
- Franchement pour l'envoi de fichier, surtout d'un PC local, pourquoi ne pas utiliser le FTP ?
- Est-ce ton site escrime-info.com ?
- Du XML n'étant que du texte, ne peux tu pas créer un API en php pour traiter justement des données textes d'un envoie POST via PB ?
- Est-ce que PB est vraiment nécessaire pour cette opération ?
- Ne serait-il pas plus simple d'utiliser un webgadget dans ton programme PB ?
- Franchement pour l'envoi de fichier, surtout d'un PC local, pourquoi ne pas utiliser le FTP ?
- Est-ce ton site escrime-info.com ?
- Du XML n'étant que du texte, ne peux tu pas créer un API en php pour traiter justement des données textes d'un envoie POST via PB ?
- Est-ce que PB est vraiment nécessaire pour cette opération ?
- Ne serait-il pas plus simple d'utiliser un webgadget dans ton programme PB ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Communiquer avec un formulaire
Bonjour et merci pour ces pistes
- Franchement pour l'envoi de fichier, surtout d'un PC local, pourquoi ne pas utiliser le FTP ? j'aurais préféré mais le gestionnaire du site ne veux plus administrer FTP. D'autre logiciel fonctionne de cette manière
- Est-ce ton site escrime-info.com ? Oui
- Du XML n'étant que du texte, ne peux tu pas créer un API en php pour traiter justement des données textes d'un envoie POST via PB ? à creuser
- Est-ce que PB est vraiment nécessaire pour cette opération ? J'ai développé un logiciel de gestion de compétition d'escrime en PB donc la mise à jour des résultats en ligne est en PB
- Ne serait-il pas plus simple d'utiliser un webgadget dans ton programme PB ? oblige des manipulations alors que la mise à jour doit être transparente pour l'utilisateur
La méthode $_FILES consiste à transmettre un fichier formaté ( comme les envoies de mail). Cette partie la est réglée mais pour la mettre en oeuvre je dois régler problème d'accès mémoire de la solution présentée dans le code trouvé sur le forum anglais.
- Franchement pour l'envoi de fichier, surtout d'un PC local, pourquoi ne pas utiliser le FTP ? j'aurais préféré mais le gestionnaire du site ne veux plus administrer FTP. D'autre logiciel fonctionne de cette manière
- Est-ce ton site escrime-info.com ? Oui
- Du XML n'étant que du texte, ne peux tu pas créer un API en php pour traiter justement des données textes d'un envoie POST via PB ? à creuser
- Est-ce que PB est vraiment nécessaire pour cette opération ? J'ai développé un logiciel de gestion de compétition d'escrime en PB donc la mise à jour des résultats en ligne est en PB
- Ne serait-il pas plus simple d'utiliser un webgadget dans ton programme PB ? oblige des manipulations alors que la mise à jour doit être transparente pour l'utilisateur
La méthode $_FILES consiste à transmettre un fichier formaté ( comme les envoies de mail). Cette partie la est réglée mais pour la mettre en oeuvre je dois régler problème d'accès mémoire de la solution présentée dans le code trouvé sur le forum anglais.
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
Re: Communiquer avec un formulaire
J'ai trouve le pb access memoire invalide
La déclaration de la variable conid.l = OpenNetworkConnection(URL$,80)
doit être conid = OpenNetworkConnection(URL$,80)
La déclaration de la variable conid.l = OpenNetworkConnection(URL$,80)
doit être conid = OpenNetworkConnection(URL$,80)
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
Re: Communiquer avec un formulaire
conid.i devrait fonctionner en x64
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Communiquer avec un formulaire
Si je résume:
1. Tu possède le site, donc tu peux aller côté serveur.
2. Tu veux envoyer un fichier xml depuis une application PB
?
Si oui, alors voilà un exemple minimum.
Ce système ne va pas stocker des fichiers XML directement.
C'est au script PHP de parser la variable $_REQUEST["XML"] et de l'envoyer vers un/des fichier(s) ou vers une base de données.
L’intérêt est que tu peux filtrer ce qui est envoyé pour ne pas subir du flood.
Code PHP à mettre sur le serveur:
(envoyer.php à renommer si on ne veut conserver l'autre)
(se contente ici d'afficher ce qu'il a reçu)
Code PB pour envoyer le fichier
(simple requête HTTP méthode Post (envoi des données dans le corps du message)
C'est une base. À toi d'améliorer. Cela fait longtemps que je n'ai pas fait de PHP, donc c'est un bricolage rapide.
Si tu as accès complet au serveur, tu peux aussi créer un système à base de CGI avec PB

1. Tu possède le site, donc tu peux aller côté serveur.
2. Tu veux envoyer un fichier xml depuis une application PB
?
Si oui, alors voilà un exemple minimum.

C'est au script PHP de parser la variable $_REQUEST["XML"] et de l'envoyer vers un/des fichier(s) ou vers une base de données.
L’intérêt est que tu peux filtrer ce qui est envoyé pour ne pas subir du flood.
Code PHP à mettre sur le serveur:
(envoyer.php à renommer si on ne veut conserver l'autre)
(se contente ici d'afficher ce qu'il a reçu)
Code : Tout sélectionner
<?PHP
print("<HTML>");
print "XML Data = " . $_REQUEST["XML"];
print("</HTML>");
?>
(simple requête HTTP méthode Post (envoi des données dans le corps du message)
Code : Tout sélectionner
XML$ = "XML=<Test>Hello World</Test>"
HttpRequest = HTTPRequest(#PB_HTTP_Post, "127.0.0.1/envoyer.php", XML$)
If HttpRequest
Debug "Status : " + HTTPInfo(HTTPRequest, #PB_HTTP_StatusCode)
Reponse$ = HTTPInfo(HTTPRequest, #PB_HTTP_Response)
FinishHTTP(HTTPRequest)
; Affichage de test
File$ = GetTemporaryDirectory() + "test.html"
DeleteFile(File$)
OpenFile(0, File$)
WriteString(0, Reponse$)
CloseFile(0)
RunProgram(File$)
Else
Debug "La requête a échoué"
EndIf


Re: Communiquer avec un formulaire
Merci Marc56
j'ai accès a un site test similaire pour le moment mais pas au site défini (ce serait trop facile) donc cela m'oblige à m'adapter
donc je ne peut pas utiliser la méthode $_REQUEST mais uniquement la méthode $_FILES
j'ai accès a un site test similaire pour le moment mais pas au site défini (ce serait trop facile) donc cela m'oblige à m'adapter
donc je ne peut pas utiliser la méthode $_REQUEST mais uniquement la méthode $_FILES
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS