C++ C编程curl显示带有其他详细信息的响应

C++ C编程curl显示带有其他详细信息的响应,c++,c,curl,wsdl,libcurl,C++,C,Curl,Wsdl,Libcurl,我在c编程中使用curl从wsdl服务获取响应 size_t write_data(void *ptr, size_t size, size_t count, void *stream) { /* ptr - your string variable. stream - data chuck you received */ printf("%.*s", size, (char*)stream); } int GET_FILE1(char *buffer,cha

我在c编程中使用curl从wsdl服务获取响应

size_t write_data(void *ptr, size_t size, size_t count, void *stream)
{
      /* ptr - your string variable.
      stream - data chuck you received */

     printf("%.*s", size, (char*)stream);
}
int GET_FILE1(char *buffer,char *filename)
{
    CURL *curl;
    CURLcode res;
    struct curl_slist *headers = NULL;
    FILE *out_fd = (FILE *) 0;
    char errorbuf[300] = "",tmpbuff[128]="";
    char errmsg[256];
    int Timeout=120;   //Default timeout is = 2 mins
    int buffer_size = 0;
    char urlbuff[256]="";
    char mstr[10240];

    memset(urlbuff,0,sizeof(urlbuff));
        memset(tmpbuff,0,sizeof(tmpbuff));
    buffer_size = strlen(buffer);


    strcpy(tmpbuff,"http://10.10.1.182:8080/services/Application?wsdl");

    tmpbuff[strlen(tmpbuff)]='\0';
    curl = curl_easy_init();
    if(curl)
    {
        //printf("\nBUFFER:\n%s\n", buffer);
        //printf("\nbuffer_size:%d\n",buffer_size);
        //printf("\nDownloading %s file...\n", filename);
        out_fd = fopen (filename, "w");
        curl_easy_setopt(curl, CURLOPT_FILE, out_fd);
        printf("%s:Sign-In Request\n", __func__);
        headers = curl_slist_append(headers, "Content-type:application/soap+xml; charset=utf-8; action=\"http://wsdlclass.wsdlcreat.sims.com/userloginMethod\"");
        //sprintf(urlbuff,"%s?op=GetServerTime","http://119.82.117.10/clientDemo/GetServerTime.asmx");
        //sprintf(urlbuff,"%s?op=UpdatePaymentDetails",tmpbuff);
        //printf("URL:%s\n",urlbuff);
        curl_easy_setopt(curl, CURLOPT_URL, tmpbuff);
        curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0);
        //curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);


        curl_easy_setopt(curl, CURLOPT_HEADER, 0L);
        curl_easy_setopt(curl, CURLOPT_WRITEHEADER, 0L);

        //curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, write_header);


        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);



        curl_easy_setopt(curl, CURLOPT_WRITEDATA, mstr);


        curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, buffer_size);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, buffer);

        //curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
        //curl_easy_setopt(curl, CURLOPT_TIMEOUT, Timeout);
        //curl_easy_setopt(curl, CURLOPT_ERRORBUFFER,errmsg);

        printf("The Server%s:Performing Transaction.....\n",__func__);
        res = curl_easy_perform(curl);
        printf("res=after culreasey perform%d\n",res);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
        printf("\nerrorbuf:%s\n",errmsg);
        fclose(out_fd);
        if(CURLE_OK != res)
        {
            puts("error occured is\n" );
            //ppp_close();
            return -1;
        }
    }

    return 0;
}
我已经使用上面的代码来显示输出响应,我得到的响应中包含一些其他数据

<itemPrice>0.0</itemPrice><lastName xsi:nil="  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 12857    0 12857    0     0   8801      0 --:--:--  0:00:01 --:--:--  8801true"/><loginStatusId>0</loginStatusId>
0.00
错误:显示输出XML,其中包含以下文本

%总接收百分比%x平均速度时间电流 数据加载上载总左速度 100 12857 0 12857 0 0 8801 0--:::--0:00:01--:--


请有人帮我摆脱这个错误。谢谢。

尝试发布curl代码以读取响应…请编辑您的问题,以包括错误是什么。您的
CURLOPT_WRITEFUNCTION
回调(我假设这就是
write_data
的内容)毫无意义。接收到的数据由
ptr
指向,其大小为
size*count
。最后一个参数称为
stream
,它只是使用
CURLOPT_WRITEDATA
选项设置的任何参数的副本。顺便说一句,如果您根本不设置
CURLOPT_WRITEFUNCTION
回调,并将
stdout
传递给
CURLOPT_WRITEDATA
,您将获得所需的效果—数据转储到标准输出。默认的回调函数是
fwrite
。我已经用完整的代码更新了问题。@IgorTandetnik我不是专家,我只是在像你这样的人的帮助下做的。你能清楚地告诉我我做错了什么吗。我已经更新了问题中的完整代码。