cURL / Mailing Lists / curl-library / Single Mail

curl-library

RE: CURL custom POST commands

From: Fitzgerald, Kevin <kevin.fitzgerald_at_hp.com>
Date: Fri, 28 Aug 2015 18:32:12 +0000

From: curl-library [mailto:curl-library-bounces_at_cool.haxx.se] On Behalf Of Ray Satiro via curl-library
Sent: Saturday, August 15, 2015 12:28 AM
To: libcurl development <curl-library_at_cool.haxx.se>
Subject: Re: CURL custom POST commands

On 8/14/2015 4:21 PM, Fitzgerald, Kevin wrote:

Hello again, I have decided to try a different tack and I am using the sendrecv example from the site. Everything seems to work as I need it to, but I am getting an Internal Server Error back from the server.
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"<http://www.w3.org/2003/05/soap-envelope> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<http://www.w3.org/2001/XMLSchema-instance> xmlns:xsd="http://www.w3.org/2001/XMLSchema"<http://www.w3.org/2001/XMLSchema>><soap:Body><soap:Fault><soap:Code><soap:Value>soap:Receiver</soap:Value></soap:Code><soap:Reason><soap:Text xml:lang="en">System.Web.Services.Protocols.SoapException: Server was unable to process request. ---&gt; System.Xml.XmlException: Data at the root level is invalid. Line 1, position 1.

I think I am getting this error because of a byte-order mark (BOM) that is being added to the HTTP. The data being sent is correct for the web services request. Is there a curl option to remove this from the request when using culr_easy_send? Any help would be appreciated. Below is the code:
            curl = curl_easy_init();
            if(curl)
            {
              const char *request = full_msg;
              curl_socket_t sockfd; /* socket */
              long sockextr;
              size_t iolen;
              curl_off_t nread;

               printf("\n\n\nYou are using libcurl/%s\n\n\n", curl_version_info(CURLVERSION_NOW)->version);

               curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);

               /* specify target URL */
               curl_easy_setopt(curl, CURLOPT_URL, url);

               curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);

               curl_easy_setopt(curl, CURLOPT_LOCALPORT, dcf_port);

               curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);

CURLOPT_CONNECT_ONLY is for custom protocols. I don't understand why you would need that option for sending a SOAP message. How is the BOM being added to the HTTP? Are you trying to imitate the HTTP protocol? It sounds like you are complicating things. Did you try sending your message via HTTPS as I suggested, and without disabling verification?

Hello again. It appears that I am now successfully connecting to the web service, but I having one issue that I don’t understand. I am using the below code to get the response back from the web service:
/* read the response */
               wait_on_socket(sockfd, 1, 60000L);
               res = curl_easy_recv(curl, s2, 32768, &iolen);

               if(CURLE_OK != res)
                  break;

               fprintf(stdout, "%s\n", s2);
               nread = (curl_off_t)iolen;

               printf("Received %" CURL_FORMAT_CURL_OFF_T " bytes.\n", nread);
               /* always cleanup */
               curl_easy_cleanup(curl);

s2 is a buffer to capture the response. I am displaying this buffer in my job’s sysout. The issue is that it appears that all of the data in the response is not in the buffer. Below is the displayed buffer:
HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
Set-Cookie: ASP.NET_SessionId=sfmiyijxoyot1oub0sd2bb55; path=/; HttpOnly
X-Powered-By: ASP.NET
Date: Fri, 28 Aug 2015 18:14:09 GMT
Content-Length: 568

Received 919 bytes.
* Closing connection #0
The sysout says I am receiving 919 bytes from the web service. This is the same number of bytes I receive from the web service using a command line wgets sending the same data, so it appears that I am getting the expected response. But where is the rest of the data? It should have the following in the buffer as well:
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:
xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><checkCertificationsResponse xmlns="http://workweb.dwd.state.wi.us/KIDS/LicenseCertification/Service"><checkCertificat
ionsResult><LicenseCertificationStatus><ssn>395555555</ssn><firstName>LARRY</firstName><lastName>MEDICINA</lastName><middleName>A</middleName><dateOfBirth>05/15/1965</d
ateOfBirth><genderCode>M</genderCode><agencyCode>WDHF</agencyCode><licenseCategoryCode>PO</licenseCategoryCode><certified>Yes</certified><certificationReason>Delinquenc
y</certificationReason><certificationStartDate>04/07/2010</certificationStartDate><uniqueRecordIdentifier>1</uniqueRecordIdentifier></LicenseCertificationStatus></check
CertificationsResult></checkCertificationsResponse></soap:Body></soap:Envelope>

Am I doing something wrong in my use of curl_easy_recv? From the description on the curl website, what I am doing looks correct, but then where is the data?

Thank you,

Kevin

-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette: http://curl.haxx.se/mail/etiquette.html
Received on 2015-08-28