我正在尝试使用C API将基于curl的soap请求发布到url。我的libcurl版本是curl 7.30.0(i686-pc-linux-gnu)libcurl / 7.30.0 OpenSSL / 1.0.0 zlib / 1.2.5。我收到以下错误。以下代码也用于发布请求.i使用正确的肥皂动作以及“ GetAuthToken”,为什么在发布请求时发生此错误。

错误:
由于EndpointDispatcher的ContractFilter不匹配,因此无法在接收方处理带有动作''的消息。这可能是由于合同不匹配(发送方和接收方之间的操作不匹配)或发送方和接收方之间的绑定/安全不匹配造成的。检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全性要求,例如消息,传输,无)

请求:
         123456789

网址:
http://x.xx.xx.xxx:20003/HIMS/SecurityService/?wsdl

样例代码:

int main()
{

    CURL *curl;

    CURLcode res;

    struct curl_slist *headers = NULL;

    FILE *out_fd = (FILE *) 0;

    char errorbuf[300]="",filename[32]="Response.txt";

    char errmsg[256];

    int Timeout=120;

    int buffer_size = 0;

    char urlbuff[100]="";

    char buff[128] = "http://x.xx.xx.xxx:20003/HIMS/SecurityService/?wsdl";

    memset(urlbuff,0,sizeof(urlbuff));

    curl = curl_easy_init();

    buffer_size = strlen(buffer);
    if(curl)
    {

            out_fd = fopen (filename, "w");
            curl_easy_setopt(curl, CURLOPT_FILE, out_fd);
            headers = curl_slist_append(headers, "Content-type:text/xml;charset=utf-8; SOAPAction=GetAuthToken");
            sprintf(urlbuff,"%s",buff);

            curl_easy_setopt(curl, CURLOPT_URL, urlbuff);
            Timeout=2000;

            curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0);
            curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
            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);

            res = curl_easy_perform(curl);
            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
            fclose(out_fd);
            if(CURLE_OK != res)
            {
                    printf("\nerrorbuf:%s:%d\n",errorbuf,res);
                    return -1;
            }
            return 0;
    }


}

最佳答案

假设您已经为此请求创建了一个有效的肥皂信封。在您的代码中,您没有使用curl定义POST请求。

curl_easy_setopt(curl, CURLOPT_POST, 1L);

关于c - curl wsdl soap错误-发送方和接收方之间的操作不匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21477114/

10-12 05:58