コード例 #1
0
ファイル: httpposttest.c プロジェクト: 119-org/TND
int main(int argc, char **argv)
{ char *buf;
  size_t len;
  struct soap soap;

  soap_init(&soap);
  /* chunking conserves memory and is generally faster: */
  soap_set_omode(&soap, SOAP_IO_CHUNK);

  if (argc < 2)
  { /* CGI server */
    struct http_post_handlers handlers[] =
    { { "image/jpg", jpg_handler },
      { "image/*",   image_handler },
      { "image/*;*", image_handler },
      { "text/*",    text_handler },
      { "text/*;*",  text_handler },
      { NULL }
    };
    soap_register_plugin_arg(&soap, http_post, handlers); /* register plugin (server only) */
    soap_serve(&soap);
    exit(0);
  }

  /* client */
  if (soap_post_connect(&soap, argv[1], NULL, "text/html")
   || soap_send(&soap, "<html>")
   || soap_send(&soap, argc == 2 ? "Hello" : argv[2])
   || soap_send(&soap, "</html>")
   || soap_end_send(&soap))
  { soap_print_fault(&soap, stderr);
    exit(1);
  }
  /* after sending, receive body (note: POST handlers should not be set) */
  if (soap_begin_recv(&soap)
   || soap_http_body(&soap, &buf, &len)
   || soap_end_recv(&soap))
  { soap_print_fault(&soap, stderr);
    exit(1);
  }
  printf("Received %lu bytes of type %s:\n", (unsigned long)len, soap.http_content?soap.http_content:"");
  soap_end(&soap);
  soap_done(&soap);
  return 0;
}
コード例 #2
0
ファイル: main.c プロジェクト: eaguileraf/ServiciosRest
int llamar_servicio_post(char *proxyHost)
{
    struct value        resJSON;
    struct soap         *soap           = soap_new();
    struct value        jsonRequest;
    struct _struct      estructuraPoC;
    struct value        title, body, userId;
    struct member       miembrosPoC[3];
    
    if (proxyHost && strlen(proxyHost) > 0) soap->proxy_host = proxyHost;
    
    printf("Ejemplo de llamada get recuperando JSON\n");
    printf("---------------------------------------\n");
    
    if (soap_post_connect(soap, "http://jsonplaceholder.typicode.com/posts", NULL, "application/json"))
    { 
        soap_print_fault(soap, stderr);
        printf("Error en la conexión con la API post.\n");
        goto finalizar;
    }
    
    // JSON con 3 miembros
    
    // Title
    title.__type        = SOAP_TYPE__string;
    char sTitle[10]     = "foo";
    title.ref           = sTitle;

    // body
    body.__type         = SOAP_TYPE__string;
    char sBody[10]      = "bar";
    body.ref            = sBody;
    
    // userId
    userId.__type       = SOAP_TYPE__int;
    int iUserId         = 1;
    userId.ref          = &iUserId;
    
    miembrosPoC[0].name     = "title";
    miembrosPoC[0].value    = title;
    miembrosPoC[1].name     = "body";
    miembrosPoC[1].value    = body;
    miembrosPoC[2].name     = "userId";
    miembrosPoC[2].value    = userId;
   
    estructuraPoC.__size = 3;
    estructuraPoC.member = miembrosPoC;
    
    jsonRequest.__type   = SOAP_TYPE__struct;
    jsonRequest.ref      = &estructuraPoC;
   
    if (json_send(soap, &jsonRequest))
    {
        soap_print_fault(soap, stderr);
        printf("Error en el envío JSON en la llamada post.\n");
        goto finalizar;
    }
    
    if (soap_end_send(soap))
    {
        soap_print_fault(soap, stderr);
        printf("Error al finalizar envío JSON en la llamada post.");
        goto finalizar;
    }
    
    if (soap_begin_recv(soap))
    {
        soap_print_fault(soap, stderr);
        printf("Error en el inicio de la recepción JSON en la API post.");
        goto finalizar;
    }
   
    if (json_recv(soap, &resJSON))
    {
        soap_print_fault(soap, stderr);
        printf("Error en la obtención del JSON en la API post.\n");
        goto finalizar;
    }
   
    if (soap_end_recv(soap))
    {
        soap_print_fault(soap, stderr);
        printf("Error en la finalización de la API post.\n");
        goto finalizar;
    }
    
    if (resJSON.__type == SOAP_TYPE__struct)
    {
        struct _struct *estructuraJSON;
        estructuraJSON = (struct _struct *)resJSON.ref;
        
        int i;
        for (i=0; i < estructuraJSON->__size; i++)
        {
            printf("%s: ", (estructuraJSON->member + i)->name);
            if ((estructuraJSON->member + i)->value.__type == SOAP_TYPE__string)
            {
                printf("Cadena: %s\n", (estructuraJSON->member + i)->value.ref);
            }
            else if ((estructuraJSON->member + i)->value.__type == SOAP_TYPE__int)
            {
                printf("Entero: %ld\n", *(int*)((estructuraJSON->member + i)->value.ref));
            }
        }
    }
    else
    {
        printf("Se recibe un JSON no esperado.\n");
        goto finalizar;
    }
    
    printf("Ha finalizado correctamente la llamada post\n");
    printf("------------------------------------------\n");
    
    finalizar:
   
    soap_destroy(soap);
    soap_end(soap);
    soap_free(soap);
    
    return 0;
}