Page 1 sur 2

Requete POST en HTTPS

Publié : ven. 21/sept./2007 11:12
par Progi1984
Bonjour à tous, pour un projet lambda, j'aurais besoin d'envoyer une requete POST sur du HTTPS...

Comment pourrais je faire ?
Note : code multi plateforme :)

Merci d'avance

Publié : mar. 23/sept./2008 9:32
par eddy
j'ai le même problème.

Avec la 4.30, je suis presque arrivé à faire une appli cross-plateforme mais je coince sur des problèmes réseaux.
Je me demande si c'est possible faire ça avec les commandes Network...

J'ouvre une connexion sur le port 443 et je fais des essais de SendString

Publié : mar. 23/sept./2008 10:03
par Progi1984
Eddy, aprés un an, le plus simple sera d'utiliser la librarie LibCurl. Car vu que HTTPS alias HTTP in SSL est un protocole sécurisé, cela est trés compliqué de le refaire en PureBasic.

A moins que tu aies des exemples d'échange réseau (genre HTTP : http://www.iprelax.fr/http/http_session.php)

Publié : mar. 23/sept./2008 10:12
par eddy
C'est quoi LibCurl ? une userlib ou un DLL ?

Publié : mar. 23/sept./2008 10:27
par Progi1984

Publié : mar. 23/sept./2008 11:04
par eddy
Oh... Il faut compiler le bazar sour MacOsX
Bon ca me gave... Décidemment je dois encore rester sur mon API windows.

A moins que je trouve un moyen de m'en passer

Publié : mar. 23/sept./2008 12:45
par eddy
Je vais tester ce code HttpGet en mode HTTPS :
http://www.purebasic.fr/english/viewtop ... ight=https

Ca pourrait peut-être me suffir :P

Publié : mar. 23/sept./2008 13:37
par Progi1984
Tu nous tiens au courant si ca marche mais sinon suis pas convaincu.

Sinon tu as une utilisation de HTTPS avec LibCurl ici (Ligne 240 environ)
http://puremessenger.svn.sourceforge.ne ... iew=markup

Publié : mar. 23/sept./2008 22:40
par eddy
J'ai testé mais ca marche pas.
Peut-être que je ne comprends pas bien les requêtes HTTPS

Je n'ai plus d'erreur 400 BAD REQUEST :o
mais je ne reçoit pas de réponse. :?

Code : Tout sélectionner

   Structure USI     
      HTTP_HOST.s
      HTTP_AGENT.s
      HTTP_LOGIN.s
      HTTP_PWD.s
   EndStructure
   Global USI.USI   

   USI\HTTP_HOST="www.test.com"
   USI\HTTP_AGENT="pureAgent/1.0.0"""
   USI\HTTP_LOGIN=""
   USI\HTTP_PWD=""

Procedure.s UsiGetResult(url.s)
   Protected Server=OpenNetworkConnection(USI\HTTP_HOST, 443)
   If Server
      Protected auth.s=USI\HTTP_LOGIN+":"+USI\HTTP_PWD
      Protected code.s=Space(512)
      Base64Encoder(@auth, Len(auth), @code, Len(code))
      
      Protected Request$=""
      Protected Result$=""
      Protected BytesRead
      Protected BufferLength=1024*40
      Protected Buffer=AllocateMemory(BufferLength)
      
      Request$="Content-Type : application/x-www-form-urlencoded"+#CRLF$
      Request$+"Authorization: BASIC "+Trim(code)+#CRLF$
      Request$+#CRLF$
      Request$+"GET https://"+USI\HTTP_HOST+url+" HTTP/1.1"+#CRLF$
      Request$+"Host: "+USI\HTTP_HOST+#CRLF$
      Request$+"User-Agent: "+USI\HTTP_AGENT+#CRLF$
      Request$+"Accept: text/xml,application/xml,application/xhtml+xml,text/html"+#CRLF$
      Request$+"Accept-Charset : ISO-8859-1, utf-8;q=0.7,*;q=0.7"
      Request$+"Keep-Alive : 300"+#CRLF$
      Request$+"Connection: keep-alive"+#CRLF$
      Request$+"Referer: https://"+USI\HTTP_HOST+"/"+#CRLF$
      
      SendNetworkData(Server, @Request$, Len(Request$))
      Delay(100)
      
      Repeat
         Result$=""
         Repeat
            BytesRead=ReceiveNetworkData(Server, Buffer, BufferLength)
            Result$+PeekS(Buffer, BytesRead)
         Until BytesRead=0
         Delay(100)
      Until NetworkClientEvent(Server)<>#PB_NetworkEvent_Data
      MessageRequester("", Result$)
      
      FreeMemory(Buffer)
      CloseNetworkConnection(Server)
      
      ProcedureReturn Result$
   EndIf   
EndProcedure

Publié : mer. 24/sept./2008 12:53
par Progi1984
Je testerais ce soir car là, je suis derrière un proxy !

Publié : mer. 24/sept./2008 21:20
par Progi1984
Aprés tests (code ci dessous), je ne pense pas que tu vas y arriver à moins de recoder du SSL, puis du HTTP (par dessus, mais c'est le plus simple).

Code : Tout sélectionner

   Structure USI     
      HTTP_HOST.s
      HTTP_AGENT.s
      HTTP_LOGIN.s
      HTTP_PWD.s
   EndStructure
   Global USI.USI   

   USI\HTTP_HOST="www.google.fr"
   USI\HTTP_AGENT="pureAgent/1.0.0"
   USI\HTTP_LOGIN=""
   USI\HTTP_PWD=""

Procedure.s UsiGetResult(url.s)
   Protected Server=OpenNetworkConnection(USI\HTTP_HOST, 443)
   If Server
      Protected auth.s=USI\HTTP_LOGIN+":"+USI\HTTP_PWD
      Protected code.s=Space(512)
      Base64Encoder(@auth, Len(auth), @code, Len(code))
     
      Protected Request$=""
      Protected Result$=""
      Protected BytesRead
      Protected BufferLength=1024*40
      Protected Buffer=AllocateMemory(BufferLength)
     
      Request$="Content-Type : application/x-www-form-urlencoded"+#CRLF$
      Request$+"Authorization: BASIC "+Trim(code)+#CRLF$
      Request$+#CRLF$
      Request$+"GET https://"+USI\HTTP_HOST+url+" HTTP/1.1"+#CRLF$
      Request$+"Host: "+USI\HTTP_HOST+#CRLF$
      Request$+"User-Agent: "+USI\HTTP_AGENT+#CRLF$
      Request$+"Accept: text/xml,application/xml,application/xhtml+xml,text/html"+#CRLF$
      Request$+"Accept-Charset : ISO-8859-1, utf-8;q=0.7,*;q=0.7"
      Request$+"Keep-Alive : 300"+#CRLF$
      Request$+"Connection: keep-alive"+#CRLF$
      Request$+"Referer: https://"+USI\HTTP_HOST+"/"+#CRLF$+#CRLF$
      Debug Server
      SendNetworkData(Server, @Request$, Len(Request$))
      Delay(100)
     
      Repeat
         Result$=""
         Repeat
            BytesRead=ReceiveNetworkData(Server, Buffer, BufferLength)
            Debug BytesRead
            Result$+PeekS(Buffer, BytesRead)
         Until BytesRead=0
         Delay(100)
      Until NetworkClientEvent(Server)<>#PB_NetworkEvent_Data
      MessageRequester("", Result$)
     
      FreeMemory(Buffer)
      CloseNetworkConnection(Server)
     
      ProcedureReturn Result$
   EndIf   
EndProcedure
InitNetwork()
UsiGetResult("https://www.google.fr")

Publié : mer. 24/sept./2008 21:37
par eddy
oui c'était absurde vu qu'en https normalement on peut pas sniffer les paquets envoyés

Publié : mer. 24/sept./2008 21:51
par Progi1984
Absurde, non, c'était l'inconnu.

Si tu veux un coup de main pour LibCurl, je commence à connaitre !

Publié : mer. 24/sept./2008 23:59
par eddy
je veux bien.
Je ne sais même pas quoi faire du fichier que j'ai téléchargé.
Il y a encore quelque chose à compiler à l'intérieur.

Je cherche une version Mac de la lib en fait.

Publié : jeu. 25/sept./2008 8:09
par Progi1984
Faut traduire le fichier RW_LibCurl_Inc.pb pour qu'il soit compatible sous MacOS.

http://curl.haxx.se/download.html#MacOSX surement avec le paquet devel SSL.

Désolé mais je ne peux pas installer MacOS X sur VirtualBox pour tester.

PS : A ce propos, si quelqu'un a une technique pour installer MacOS X sous VirtualBox, ca m'intéresse.