[CENTOS] J'ai essayé de générer une source de programme en langage C à partir de cURL

Contexte

Je voulais créer un programme qui émet des demandes de service Web avec un programme C, mais c'était gênant de le créer à partir de zéro, donc après avoir étudié diverses choses, il semble que la source C puisse être générée avec la fonction cURL, alors je l'ai essayé J'ai fait.

procédure

① Génération de source (Émettez une requête avec curl. Générez le contenu de la requête exécutée en tant que source C en ajoutant l'option -libcurl)

curl -H "Content-Type: text/xml; charset=utf-8" http://ipaddr:port_number/soap/base64t -X POST -d @base64_soap.txt --libcurl post_base64.c

② Vérifiez la source générée (cela ressemble à ceci)

/********* Sample code generated by the curl command line tool **********
 * All curl_easy_setopt() options are documented at:
 * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
 ************************************************************************/
#include <curl/curl.h>

int main(int argc, char *argv[])
{
  CURLcode ret;
  CURL *hnd;
  struct curl_slist *slist1;

  slist1 = NULL;
  slist1 = curl_slist_append(slist1, "Content-Type: text/xml; charset=utf-8");

  hnd = curl_easy_init();
  curl_easy_setopt(hnd, CURLOPT_URL, "http://ipaddr:port_number/soap/base64t");
  curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" ><SOAP-ENV:Body><BASE64TOperation xmlns=\"http://www.BASE64T.BASE64T.Request.com\"><comm_args><debug_mode></debug_mode></comm_args><comm_data><strelem_0001>YWJjZGVmZw=B</strelem_0001></comm_data></BASE64TOperation></SOAP-ENV:Body></SOAP-ENV:Envelope>");
  curl_easy_setopt(hnd, CURLOPT_POSTFIELDSIZE_LARGE, (curl_off_t)326);
  curl_easy_setopt(hnd, CURLOPT_USERAGENT, "curl/7.29.0");
  curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, slist1);
  curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L);
  curl_easy_setopt(hnd, CURLOPT_SSH_KNOWNHOSTS, "/root/.ssh/known_hosts");
  curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
  curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L);

  /* Here is a list of options the curl code used that cannot get generated
     as source easily. You may select to either not use them or implement
     them yourself.

  CURLOPT_WRITEDATA set to a objectpointer
  CURLOPT_WRITEFUNCTION set to a functionpointer
  CURLOPT_READDATA set to a objectpointer
  CURLOPT_READFUNCTION set to a functionpointer
  CURLOPT_SEEKDATA set to a objectpointer
  CURLOPT_SEEKFUNCTION set to a functionpointer
  CURLOPT_ERRORBUFFER set to a objectpointer
  CURLOPT_STDERR set to a objectpointer
  CURLOPT_HEADERFUNCTION set to a functionpointer
  CURLOPT_HEADERDATA set to a objectpointer

  */

  ret = curl_easy_perform(hnd);

  curl_easy_cleanup(hnd);
  hnd = NULL;
  curl_slist_free_all(slist1);
  slist1 = NULL;

  return (int)ret;
}
/**** End of sample code ****/

(3) Après cela, si vous compilez cette source en liant la bibliothèque curl, vous pouvez exécuter le contenu exécuté par curl depuis le programme C.

# gcc post_base64.c -o post_base64 -lcurl
# ls | grep post
post_base64
post_base64.c

en conclusion

Cette fois, je l'ai essayé sur CentOS. De plus, lors de l'émission d'une requête avec cURL, un fichier séparé (@ base64_soap.txt) est préparé pour le message SOAP. Si vous souhaitez générer une source C avec une requête JSON, modifiez l'URL du service à appeler et la partie d'en-tête en -H "Content-Type: application / json; charset = UTF-8" et préparez les données au format JSON dans un fichier séparé. Vous devriez pouvoir le faire.

Recommended Posts

J'ai essayé de générer une source de programme en langage C à partir de cURL
J'ai essayé de générer automatiquement une classe à convertir d'une classe de données en un bundle avec APT
J'ai essayé de déplacer Hello World (+ α) écrit en langage C à partir de JavaScript [Web Assembly]
J'ai essayé de mâcher C # (indexeur)
C # (polymorphisme: polymorphisme)
[Rails] J'ai essayé de faire passer la version de Rails de 5.0 à 5.2
java j'ai essayé de casser un simple bloc
J'ai essayé de développer un outil de gestion des effectifs
J'ai essayé de développer un site Web pour étudier DUO3.0.
J'ai essayé de frapper une méthode Java d'ABCL
C # (base de l'encapsulation)
J'ai essayé de créer une application de clonage LINE
J'ai essayé de développer un site Web pour enregistrer les dépenses.
J'ai essayé d'implémenter un serveur en utilisant Netty
J'ai essayé de casser le bloc avec java (1)
J'ai créé un programme qui recherche la classe cible à partir du processus surchargé avec Java
J'ai essayé de développer un site Web de partage de boutique de ramen.
J'ai essayé de créer une compétence Clova en Java
J'ai essayé de créer une fonction de connexion avec Java
Générer des modèles de JSON à Swift, PHP, C #, JAVA
J'ai essayé de mâcher C # (lire et écrire des fichiers)
J'ai essayé d'expliquer ce que vous pouvez faire dans un langage populaire pour le développement Web du point de vue d'un débutant.
J'ai essayé de développer une application web à partir d'un mois et demi d'histoire d'apprentissage de la programmation
Construisez TensorFlow 2.3.1 à partir des sources sur Ubuntu20.04 LTS et créez une bibliothèque partagée en langage C ++
J'ai essayé de faire une demande en 3 mois d'inexpérimenté
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
J'ai essayé d'ajouter une ligne de séparation à TabLayout sur Android
J'ai essayé de moderniser une application Java EE avec OpenShift.
[JDBC] J'ai essayé d'accéder à la base de données SQLite3 depuis Java.
[Rails] J'ai essayé de créer une mini application avec FullCalendar
[Débutant] J'ai créé un programme pour vendre des gâteaux en Java
J'ai essayé de convertir une chaîne de caractères en un type LocalDate en Java
J'ai essayé d'implémenter une application web pleine de bugs avec Kotlin
J'ai créé un client RESAS-API en Java
J'ai essayé de créer un environnement de développement padrino avec Docker
J'ai essayé l'analyse du code source
Pour écrire un programme orienté utilisateur (1)
J'ai essayé de vérifier yum-cron
J'ai essayé de créer une application cartographique simple dans Android Studio
J'ai essayé d'illuminer le sapin de Noël dans un jeu de la vie
J'ai essayé d'écrire du code comme une déclaration de type en Ruby
J'ai essayé de créer un environnement de développement Spring MVC sur Mac
J'ai essayé de créer une application simple en utilisant Dockder + Rails Scaffold
[Java] J'ai essayé de faire un labyrinthe par la méthode de creusage ♪
J'ai essayé de résoudre le problème de la campagne paiza "Challenge from Phantom Thief 813"
J'ai essayé de créer une fonction de groupe (babillard) avec Rails
[JDBC] J'ai essayé de faire de l'accès à la base de données SQLite3 depuis Java une méthode pour chaque instruction SQL.
J'ai essayé de créer un exemple de programme en utilisant le problème du spécialiste des bases de données dans la conception pilotée par domaine
J'ai essayé un petit docker de digdag.
Une personne écrivant C ++ a essayé d'écrire Java
J'ai essayé de résumer le support d'iOS 14
J'ai essayé d'interagir avec Java