Comment envoyer une requête http et de récupérer une réponse json en C++ Boost
J'ai besoin d'écrire une ligne de commande client pour jouer au tic-tac-toe sur un serveur.
le serveur accepte les requêtes http et envoie en retour json à mon client. je suis à la recherche d'un moyen rapide d'envoyer une requête http et de recevoir le json sous la forme d'une chaîne à l'aide de bibliothèques boost.
example http request = "http://???/newGame?name=david"
example json response = "\"status\":\"okay\", \"id\":\"game-23\", \"letter\":2"
- Remarque pour de graves affaires (principalement des serveurs existants qui peuvent faire toute sortes de fragments de codage, des compressions, keep-alive, des réponses de redirection, etc.) vous souhaitez utiliser une bibliothèque comme curl.haxx.se/libcurl
Vous devez vous connecter pour publier un commentaire.
La chose la plus simple qui correspond à la description:
En Direct Sur Coliru
Il reçoit la réponse complète. Vous pouvez le tester avec un mannequin serveur:
(également En Direct Sur Coliru):
Ce sera le signe que la demande est reçue, et la réponse sera écrite par notre client code ci-dessus.
Noter que pour plus d'idées que vous pourriez regarder les exemples http://www.boost.org/doc/libs/release/doc/html/boost_asio/examples.html (bien qu'ils mettent l'accent sur les communications asynchrones, parce que c'est le sujet de l'Asio de la bibliothèque)
code
chaussette.connect({ {}, 8087 })code
et:code
size_t bytes_transferred = chaussette.recevoir(tampon(buf), {}, ce)code
Que dois-je mettre entre accolades. j'ai fait un peu de lecture et, pour la seconde j'ai essayé de faire un nul socket_base::message_flags drapeaux; et en passant que, dans la mais mon programme semble se bloquer.{{},8087}
est court pourip::tcp::endpoint(ip::address(), 8087)
. Ce que vous mettez, il est à vous (que faites vous voulez vous connecter?). Généralement, les utilisateurs de spécifier l'adresse et le port des chaînes de caractères, et que vous utilisezip::tcp::resolver
pour régler le paramètre(s). Presque tous les échantillons à la clientèle va vous montrer comment faire (a)synchrone). Sinon,ip::address_v4::from_string("192.168.0.1")
peut être utilisé pour coder en dur une adresse ipv4, par exemple