Envoyer des données avec méthode POST à un serveur HTTP

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Golfy
Messages : 423
Inscription : mer. 25/août/2004 15:14
Localisation : Grenoble
Contact :

Envoyer des données avec méthode POST à un serveur HTTP

Message par Golfy »

Comme j'ai un peu "bataillé" pour trouver le bon format, voici une procédure simple à utiliser.
Pour un affichage correct dans le debugueur, j'ai décoché "Unicode" dans le compilateur...
Pour tester le code, http://www.hashemian.com/tools/form-pos ... hp/test123

Format : Procedure.s PostPHP(Link$, PostData$, Useragent$="Purebasic API", port.i=80, Timeout = 1000)

Procédure modifiée suite à la remarque de GallyHC

Code : Tout sélectionner

Procedure.s PostPHP(Link$, PostData$, Useragent$="Purebasic API", port.i=80, Timeout = 1000)
  ; Link$ is "http://server.domain/folder/folder/file.extension"
  ; PostData$ is all datas to post (example "Id=5&Name=Toto&Sex=M")
  BufSize.i = 4096
  LenString$=Str(Len(PostData$))
  RelativeLink$=Right(Link$,Len(Link$)-FindString(Link$,"/",8)+1)
  PostString$ = "POST "+RelativeLink$+" HTTP/1.1"+#CRLF$
  n = CountString(Link$,"/")
  Server$=StringField(Link$,3,"/")
  If UCase(StringField(Link$,1,"/"))="HTTP:"
    com$ = PostString$ + "Host: "+Server$+#CRLF$ + "User-Agent: "+Useragent$+#CRLF$
    com$ + "Accept: text/html,*/*"+#CRLF$
    com$ + "Content-Type: application/x-www-form-urlencoded"+#CRLF$
    com$ + "Content-Length: "+LenString$+#CRLF$+#CRLF$     ; very important, 2 x /r/n
    com$ + PostData$
    ConnectionID = OpenNetworkConnection(Server$, port.i,#PB_Network_TCP)
    If ConnectionID
      Res = SendNetworkData(ConnectionID,@com$,Len(com$))
      Debug "-------"
      Debug com$
      Debug "-------"
      Delay(30)  ; let's time to receive the message
      rep$ = ""
      r$ = Space(4096)
      d = ElapsedMilliseconds()
      
      ; Read network up to Timeout time and return the answer.
      Repeat
        Result = NetworkClientEvent(ConnectionID)
        If result
          receivLen = ReceiveNetworkData(ConnectionID,@r$,BufSize)
          If receivLen < 0
            ProcedureReturn rep$
          EndIf
          If receivLen > 0 And receivLen <= BufSize
            d = ElapsedMilliseconds()
            rep$ + Left(r$,receivLen)
            Debug "["+Left(r$,receivLen)+"]"
          EndIf
        EndIf
        Tm = ElapsedMilliseconds()-d
      Until Tm > Timeout
      CloseNetworkConnection(ConnectionID)
      ProcedureReturn rep$
    EndIf
  EndIf
EndProcedure

result=InitNetwork()
If result
  Debug PostPHP("http://posttestserver.com/post.php","Login=Golfy"+"&"+"userID=01234"+"&"+"Comment=demo")
  Debug PostPHP("http://www.hashemian.com/tools/form-post-tester.php/test123","Login=Golfy"+"&"+"userID=01234"+"&"+"Comment=demo")
EndIf 
End
Dernière modification par Golfy le dim. 31/août/2014 9:47, modifié 2 fois.
Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

Re: Envoyer des données avec méthode POST à un serveur HTTP

Message par GallyHC »

Bonjour,

Je comprend pas pourquoi beaucoup des dev font des choses du style "Stop$=Chr(13)+Chr(10)", quand on a une constante en Purebasic "#CRLF$". Enfin c'est une petite modif.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Envoyer des données avec méthode POST à un serveur HTTP

Message par Ar-S »

Merci golfy pour ce nouvel exemple.
@GallyHC. Tu as raison mais pour ma part, je ne m'en souviens jamais de ce #CRLF$. :P tout simplement.
~~~~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
Golfy
Messages : 423
Inscription : mer. 25/août/2004 15:14
Localisation : Grenoble
Contact :

Re: Envoyer des données avec méthode POST à un serveur HTTP

Message par Golfy »

GallyHC a écrit : Je comprend pas pourquoi beaucoup des dev font des choses du style "Stop$=Chr(13)+Chr(10)", quand on a une constante en Purebasic "#CRLF$". Enfin c'est une petite modif.
Effectivement, quand on connaît l'existence de cette constante, c'est mieux :mrgreen:
Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

Re: Envoyer des données avec méthode POST à un serveur HTTP

Message par GallyHC »

:mrgreen: pratique tout de même ^^.
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Envoyer des données avec méthode POST à un serveur HTTP

Message par Micoute »

Indubitablement !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre