c++ - ¿Qué API usar para agregar soporte de cliente HTTP en una aplicación MFC existente?
winhttp (2)
Recientemente me dieron la tarea de agregar la capacidad de interactuar con Web Map Services a una aplicación MFC existente y necesito una API HTTP del lado del cliente.
Según mi investigación, los principales candidatos parecen ser CAtlHttpClient y WinHTTP . Tenía curiosidad por ver si alguien tenía experiencias que pudieran compartir u opiniones sobre cuál sería la mejor manera de hacerlo (o sugerencias para algo completamente diferente).
A primera vista, CAtlHttpClient parece ser un poco más alto y fácil de usar. Sin embargo, en mi investigación, parecía que cada vez que la gente tenía un problema al no poder hacer algo con él, la respuesta era "usar WinHTTP".
Resultado
Terminé usando WinHTTP porque WinInet muestra cuadros de diálogo y nuestra aplicación se puede utilizar a través de una API COM. Evité Ultimate TCP / IP porque trabajo para una gran empresa y obtener un software de terceros aprobado para su uso en un producto es una completa pesadilla.
Prueba Ultimate TCP / IP disponible de forma gratuita desde aquí:
http://www.codeproject.com/KB/MFC/UltimateTCPIP.aspx
Es una biblioteca muy buena y muy fácil de integrar con tus aplicaciones.
El más simple es el envoltorio de WinInet MFC : CInternetSession y sus amigos.
WinHTTP, aunque es una API diferente, está construida en el mismo modelo que WinInet pero ofrece una mejor compatibilidad con HTTP (aunque no tiene FTP, pero probablemente no le importe). Si necesita las golosinas adicionales proporcionadas por WinHTTP debe examinarse.
Un aspecto negativo de WinHTTP es que ATL / MFC no proporciona envoltorios, a diferencia de WinInet.
Y como Rob mencionó, UltimateTCP es una excelente alternativa. Una de sus ventajas es que es una biblioteca: vincula el código a su aplicación, eliminando así los posibles problemas de DLL. Además, viene con un código fuente completo que podría ser conveniente si se topa con una limitación de la implementación.
¡Haz tu elección!