Quelle est la façon la plus simple d'appeler Http OBTENIR l'url à l'aide de Delphi?
Il y a des services web j'ai envie d'appeler ma demande, je peux l'utiliser à l'importation de l'WSDL ou par l'utilisation juste "HTTP GET" avec l'URL et les paramètres, donc je préfère le plus tard parce que c'est quelque chose de simple.
Je sais que je peux utiliser indy idhttp.obtenir, pour faire le travail, mais c'est très simple et je ne veux pas ajouter des indy code de mon application.
Mise à JOUR: désolé si je n'ai pas été clair, je voulais dire par "ne pas ajouter des indy code", que je ne veux pas ajouter des composants indy pour cette tâche simple, et préfèrent plus de manière plus légère pour cette.
- Pensez-vous simplement à l'aide de HTTP GET est assez pour invocating un webservice fonction ?
- Si c'est un service web RESTful.
- je ne savais pas de REPOS peut avoir wsdl trop
- AhmetCiftci, comme je l'ai dit avant, le service a "HTTP GET", url de l'appeler, alors pouvez utiliser le WSDL ou par simple requête HTTP GET"
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le API WinINet comme ceci:
source: http://www.scalabium.com/faq/dct0080.htm
L'API WinINet utilise les mêmes choses InternetExplorer est à l'aide de sorte que vous obtenez également toute connexion et les paramètres de proxy défini par internet explorer gratuitement.
char
/string
sont de 8 bits et les magasins de la crue de réponse octets en tant que-est dans le retour de l'string
. Le corps de la réponse a un encodage, ce qui est spécifié/déduit de l'-têtes de réponse HTTP. Etstring
a un codage de trop, qu'il s'agisse de l'ANSI en D2007 et plus tôt, ou UTF-16 dans D2009 et plus tard. Le code doit convertir le corps de la réponse des données à partir de la réponse de l'encodage Unicode, et puis de l'Unicode pourstring
s'encodage natif.TIdHTTP
composant gère les conversions pour vous quand il retourne une réponse du corps comme unstring
.Appel d'un service web RESTful à l'aide d'Indy est assez simple.
Ajouter IdHTTP à votre clause uses. Rappelez-vous que IdHTTP besoins de la "HTTP://" préfixe sur votre Url.
TIdHTTP.Create(nil);
peut être raccourcie àTIdHTTP.Create;
avec Indy 10.6En fait le code accepté réponse n'a pas fonctionné pour moi. Alors je l'ai modifié un peu de sorte qu'il renvoie en fait à Cordes et gracieusement se ferme tout le temps après l'exécution. Exemple renvoie les données récupérées comme UTF8String de sorte qu'il va bien travailler pour ASCII ainsi que pour de l'utf-8 pages.
Espère que cela aide pour quelqu'un comme moi qui était à la recherche de code facile comment faire pour récupérer le contenu de la page en Delphi.
Cheers, Aldis 🙂
Si c'est ok pour télécharger un fichier, vous pouvez utiliser TDownloadURL de la ExtActns unité. Beaucoup plus simple que l'utilisation de WinInet directement.
Il est également possible d'obtenir des notifications de progression lors de l'utilisation de ce. Il suffit d'assigner un gestionnaire d'événement pour TDownloadURL de OnDownloadProgress événement.
Dans les plus récentes versions de Delphi, il est préférable d'utiliser
THTTPClient
deSystem.Net.HttpClient
unité, puisque c'est la norme et de la croix-plate-forme. Exemple Simple estÀ l'aide de Windows HTTP API peut être trop facile.
Dans le code ci-dessus, je suppose que COM a déjà été initialisé pour le principal VCL fil. Apparemment, il pourrait ne pas être toujours le cas pour simpliste applications ou pour LCL apps. Aussi il serait certainement pas le cas pour les async (multithread) de travail.
Ci-dessous l'extrait d'un véritable code en cours d'exécution. Remarque: la fonctionnalité est bonus. Il n'est pas nécessaire de travailler. Ainsi, alors que je ne émettre des demandes, je ne se soucient pas de leurs résultats, que le résultat est ignoré et sous-évaluées.
CoInitialize(nil);
etCoUninitialize
au début et à la fin, respectivement.CoInitialize
etCoUninitialize
méthodes. Juste pour info.PromptForFileName
fonction, mais en réalité l'ensemble de la sous-système. Il s'est avéré, dans XE2 les enregistrer/ouvrir la fonctionnalité est implémentée via COM, et que la fonction a été appelée à l'intérieur d'un thread, COM Pas Initialisé, l'erreur a été signalée par Windows et avalé par la VCL. Toutefois, depuisTOpenFileDialog
est un standard de Delphi composant et de travaux simples et fiables dans les principales VCL fil, que signifie COM devient auto-initialisée dans le thread principal, quelque partUtiliser le Synapse TCP/IP fonction dans le HTTPSEND unité (HTTPGetText, HTTPGetBinary). Il fera le HTTP pull pour vous et ne nécessite pas de DLL externes autres que Winsock. La dernière version SVN fonctionne parfaitement bien dans Delphi 2009. On utilise à cette fonction de blocage des appels, donc pas d'événements au programme.
Mise à jour: Les unités sont très légers, et ne sont pas à base de composants. La dernière version de SVN fonctionne parfaitement bien en Delphi XE4 aussi.
Si votre application est uniquement pour Windows, je vous recommande d'utiliser WinSock. C'est assez simple, permet d'exécuter une requête HTTP, peut fonctionner en mode synchrone et asynchrone (à l'aide de non-blocage WSASend/WSARecv avec des rappels ou des bons vieux send/recv dans un thread dédié).