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

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
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.