Bonjour,
Je voudrais faire une requete web https a partir d'une application Win32 en Delphi 7.
avec une URL du type 'https://login:password@siteweb.com'
Est-ce-que quelqu'un sait faire ca?
MErci d'avance
David
Bonjour,
Je voudrais faire une requete web https a partir d'une application Win32 en Delphi 7.
avec une URL du type 'https://login:password@siteweb.com'
Est-ce-que quelqu'un sait faire ca?
MErci d'avance
David
Avec les composants Indy TIdHTTP et TIdSSLIOHandlerSocket, j'ai essayé ça:
mais ça ne me donne pas les données souhaitées.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 idHttp1.IOHandler := IdSSLIOHandlerSocket1; //IdHTTP1.Request.Username:='username'; //IdHTTP1.Request.Password:='pass'; IdSSLIOHandlerSocket1.SSLOptions.Method := sslvSSLv23; IdSSLIOHandlerSocket1.SSLOptions.Mode:=sslmClient; memo1.Text := idHTTP1.Get('https://url');
De plus j'utilise Indy 9, et on a le choix entre deux IOHandlers pour SSL, j'en ai pris un au hasard.
Est-ce-que quelqu'un pourrait éclairer ma lanterne?
MErci
Merci Rayek pour ces informations, mais je ne parviens pas à faire une application qui fonctionne avec si peu d'instructions, d'autant qu'en Indy 9 on n'a pas exactement l'IOHandler qui est indiqué dans le lien.
Est-ce-que tu aurais un bout de code d'exemple?
Merci
Malheureusement je n'ai aps de code d'exemple en indy9 seulement en indy10 (Voir EasyIndy dans ma signature)
J'ai installé Indy 10. Et maintenant j'obtiens le message: Connection closed gracefully
J'ai un peu plus d'informations, je reçois un header HTTP lors de ma requête https, et finalement j'ai l'impression que ma requête fonctionne, malgré que je n'aie pas directement les infos que je souhaite dans la réponse:
(j'ai masque mon ip ici)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Date: Thu, 10 Apr 2008 05:08:20 GMT Server: Apache Set-Cookie: Apache=xx.xx.xx.xx.26325120780410093; path=/; expires=Sun, 08-Apr-18 05:08:20 GMT Set-Cookie: PHPSESSID=9947680d9e0fef14a595e04ffefb4def; path=/ Expires: 0 Cache-Control: must-revalidate, post-check=0,pre-check=0 Pragma: public Content-Disposition: attachment; filename=transactions.xml Connection: close Transfer-Encoding: chunked Content-Type: application/xml Content-Language: en
A la lecture de cet entete, j'ai l'impression qu'on me demande de créer un cookie de session et de lire un fichier attaché (qui au passage contient ce qui m'intéresse)
Par contre je n'ai aucune idée de comment faire ces opérations.
il manque la première ligne...200 OK ?
et le Content-Length, car finalement il te renvoie bien un fichier XML, mais as-il un contenu ?
ceci dit, comme c'est un Connection Close, tu devrais lire la réponse jusqu'à fermeture de la connexion afin d'obtenir le fichier.
As tu les deux dlls qui sont dans le même répertoire que le logiciel (ou dans le répertoire système de windows) comme indiquer dans la ?
Paul Toth:
En ce qui concerne le 200 OK, je ne sais pas s'il est là, parce que j'ai simplement utilisé le bout de code suivant pour l'obtenir:
Rayek:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 procedure TForm1.IdHTTP1HeadersAvailable(Sender: TObject; AHeaders: TIdHeaderList; var VContinue: Boolean); begin begin memo1.Clear; memo1.Lines.Add(AHeaders.Text); end;
En ce qui concerne les DLL, oui je les ai, mais j'ai dû utiliser celles qui sont conseillées pour Indy9 car celle pour Indy10 me donne un "Could not load SSL library" (j'ai simplement mis les DLL dans le dossier de l'application)
Pour le 200 (ou autre valeurs) tu dois avoir la possibilité de l'avoir par la commande suivante :
Ou quelques choses dans le style, il te faut trouver la bonne commande (ce que je te donne c'est en Indy10, il te faut trouver l'équivalent en Indy9)).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 IdHttp.Response.ResponseCode; // normalement le 200 IdHttp.Response.ResponseText; // normalement le OK
Ok, nikel
Oui c'est ca que j'obtiens
Code: 200
Text: HTTP/1.1 200 OK
Si j'ajoute la ligne suivante dans le HeadersAvailable, j'obtiens -1
Donc apparemment le contenu n'est pas là?
Code : Sélectionner tout - Visualiser dans une fenêtre à part Edit12.Text:=inttostr(idhttp1.Response.ContentLength);
Rayek, juste une précision, je suis maintenant en Indy 10 mais c'est les DLL Indy 9 qui fonctionnent chez moi. (j'etais jusqu'à hier avec Indy 9 et j'ai desinstallé la 9 pour mettre la 10 dans mon Delphi 7).
Partager