[CENTOS] Ich habe versucht, eine C-Sprachprogrammquelle aus cURL zu generieren

Hintergrund

Ich wollte ein Programm erstellen, das Webdienstanforderungen mit einem C-Programm ausgibt, aber es war mühsam, es von Grund auf neu zu erstellen. Nachdem ich verschiedene Dinge untersucht habe, scheint es, dass die C-Quelle mit der cURL-Funktion generiert werden kann, also habe ich es versucht Ich tat.

Verfahren

① Quellengenerierung (Stellen Sie eine Anforderung mit curl aus. Generieren Sie den Inhalt der ausgeführten Anforderung als C-Quelle, indem Sie die Option -libcurl hinzufügen.)

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

② Überprüfen Sie die generierte Quelle (es sieht so aus)

/********* 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) Wenn Sie danach diese Quelle durch Verknüpfen der Curl-Bibliothek kompilieren, können Sie den von Curl ausgeführten Inhalt aus dem C-Programm ausführen.

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

abschließend

Dieses Mal habe ich es unter CentOS versucht. Wenn Sie eine Anforderung mit cURL ausgeben, wird außerdem eine separate Datei (@ base64_soap.txt) für die SOAP-Nachricht vorbereitet. Wenn Sie eine C-Quelle mit einer JSON-Anforderung generieren möchten, ändern Sie die URL des aufzurufenden Dienstes und den Header-Teil in -H "Inhaltstyp: application / json; charset = UTF-8" und bereiten Sie die Daten im JSON-Format in einer separaten Datei vor. Sie sollten dazu in der Lage sein.

Recommended Posts

Ich habe versucht, eine C-Sprachprogrammquelle aus cURL zu generieren
Ich habe versucht, automatisch eine Klasse zu generieren, um sie mit APT von einer Datenklasse in ein Bundle zu konvertieren
Ich habe versucht, Hello World (+ α) in C-Sprache aus JavaScript [Web Assembly] zu verschieben.
Ich habe versucht, C # (Indexer) zu kauen.
C # (Polymorphismus: Polymorphismus)
[Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen
Java Ich habe versucht, einen einfachen Block zu brechen
Ich habe versucht, ein Personalmanagement-Tool zu entwickeln
Ich habe versucht, eine Website für das Studium von DUO3.0 zu entwickeln.
Ich habe versucht, eine Java-Methode von ABCL zu verwenden
C # (Grund der Kapselung)
Ich habe versucht, eine LINE-Klon-App zu erstellen
Ich habe versucht, eine Website zu entwickeln, um Ausgaben zu erfassen.
Ich habe versucht, einen Server mit Netty zu implementieren
Ich habe versucht, den Block mit Java zu brechen (1)
Ich habe ein Programm erstellt, das aus dem mit Java überladenen Prozess nach der Zielklasse sucht
Ich habe versucht, eine Ramen-Shop-Sharing-Website zu entwickeln.
Ich habe versucht, eine Clova-Fähigkeit in Java zu erstellen
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
Generieren Sie Modelle von JSON zu Swift, PHP, C #, JAVA
Ich habe versucht, C # zu kauen (Dateien lesen und schreiben)
Ich habe versucht zu erklären, was Sie aus Anfängersicht in einer beliebten Sprache für die Webentwicklung tun können.
Ich habe versucht, eine Webanwendung aus anderthalb Monaten Programmier-Lerngeschichte zu entwickeln
Erstellen Sie TensorFlow 2.3.1 aus dem Quellcode unter Ubuntu20.04 LTS und erstellen Sie eine gemeinsam genutzte Bibliothek in C ++
Ich habe versucht, innerhalb von 3 Monaten einen Antrag von unerfahren zu stellen
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Ich habe versucht, TabLayout unter Android eine Trennlinie hinzuzufügen
Ich habe versucht, eine Java EE-Anwendung mit OpenShift zu modernisieren.
[JDBC] Ich habe versucht, von Java aus auf die SQLite3-Datenbank zuzugreifen.
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
[Anfänger] Ich habe ein Programm zum Verkauf von Kuchen in Java erstellt
Ich habe versucht, in Java von einer Zeichenfolge in einen LocalDate-Typ zu konvertieren
Ich habe versucht, eine Webanwendung voller Fehler mit Kotlin zu implementieren
Ich habe einen RESAS-API-Client in Java erstellt
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Ich habe versucht, den Quellcode zu analysieren
So schreiben Sie ein benutzerorientiertes Programm (1)
Ich habe versucht, yum-cron zu verifizieren
Ich habe versucht, eine einfache Karten-App in Android Studio zu erstellen
Ich habe versucht, den Weihnachtsbaum in einem Lebensspiel zu beleuchten
Ich habe versucht, Code wie eine Typdeklaration in Ruby zu schreiben
Ich habe versucht, eine Spring MVC-Entwicklungsumgebung auf einem Mac zu erstellen
Ich habe versucht, eine einfache Anwendung mit Dockder + Rails Scaffold zu erstellen
[Java] Ich habe versucht, mit der Grabmethode ein Labyrinth zu erstellen ♪
Ich habe versucht, das Paiza-Kampagnenproblem "Herausforderung von Phantomdieb 813" zu lösen.
Ich habe versucht, mit Rails eine Gruppenfunktion (Bulletin Board) zu erstellen
[JDBC] Ich habe versucht, den SQLite3-Datenbankzugriff von Java in eine Methode für jede SQL-Anweisung umzuwandeln.
Ich habe versucht, ein Beispielprogramm mit dem Problem des Datenbankspezialisten für domänengesteuertes Design zu erstellen
Ich habe ein wenig digdags docker.run_options ausprobiert
Eine Person, die C ++ schreibt, hat versucht, Java zu schreiben
Ich habe versucht, die Unterstützung für iOS 14 zusammenzufassen
Ich habe versucht, mit Java zu interagieren