Requete POST en HTTPS

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Requete POST en HTTPS

Message 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
eddy
Messages : 67
Inscription : mer. 09/avr./2008 2:08

Message 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
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message 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)
eddy
Messages : 67
Inscription : mer. 09/avr./2008 2:08

Message par eddy »

C'est quoi LibCurl ? une userlib ou un DLL ?
eddy
Messages : 67
Inscription : mer. 09/avr./2008 2:08

Message 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
eddy
Messages : 67
Inscription : mer. 09/avr./2008 2:08

Message 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
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message 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
eddy
Messages : 67
Inscription : mer. 09/avr./2008 2:08

Message 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
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Je testerais ce soir car là, je suis derrière un proxy !
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message 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")
eddy
Messages : 67
Inscription : mer. 09/avr./2008 2:08

Message par eddy »

oui c'était absurde vu qu'en https normalement on peut pas sniffer les paquets envoyés
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Absurde, non, c'était l'inconnu.

Si tu veux un coup de main pour LibCurl, je commence à connaitre !
eddy
Messages : 67
Inscription : mer. 09/avr./2008 2:08

Message 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.
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message 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.
Répondre