Page 1 sur 1

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

Publié : sam. 30/août/2014 23:26
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

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

Publié : dim. 31/août/2014 8:26
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

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

Publié : dim. 31/août/2014 8:44
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.

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

Publié : dim. 31/août/2014 9:43
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:

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

Publié : dim. 31/août/2014 10:01
par GallyHC
:mrgreen: pratique tout de même ^^.

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

Publié : dim. 31/août/2014 11:11
par Micoute
Indubitablement !