cURL / Mailing Lists / curl-library / Single Mail

curl-library

Problem posting XML (content is not allowed in prolog)

From: BINETTE Pascal <pbinette_at_imds-world.com>
Date: Tue, 17 Feb 2009 15:01:42 -0500

Hi,

 

I've been spending about 5 days on this problem, and I can't get this to work. Basically I'm trying to communicate with an XML Server, and while I can communicate with the server, it doesn't recognize what I'm sending it; I can getting the "content is not allowed in prolog" response.

 

The form I need to emulate is this:

 

<form action="eex-xmlserver/request" method="post"

            enctype="multipart/form-data">

            <p>

                        Please choose an request file(*.xml) from your workstation, which

                        should be processed:

                        <br>

 

                        <input name="xml" type="file" size="50" maxlength="1000000"

                                    accept="text/xml">

                        <input type="submit">

            </p>

</form>

 

Here's also a sample XML file I'm trying to send (this works when I use an online html form):

 

<?xml version="1.0" encoding="UTF-8"?>

<REQUEST XMLID="XMLID">

   <LOGIN REQUESTID="0">

       <USERNAME>username</USERNAME>

      <PASSWORD CRYPT="NONE">password</PASSWORD>

   </LOGIN>

</REQUEST>

 

I tried just about everything, encoding in several formats (URL encoding, Base 64, XML entities), I also tried using the regular POST versus the HTTP POST, I tried sending a file versus sending the XML tags as a string, etc. I'm now out of options.

 

If anyone has experience with this, I would greatly appreciate your help. Here's my current test code:

 

 

struct curl_httppost* post = NULL;

struct curl_httppost* last = NULL;

 

curl = curl_easy_init();

if (curl == NULL)

            AfxMessageBox("init failed");

 

// reading the XML file, and encoding its content

CStdioFile testfile;

testfile.Open("C:\\TEMP\\login_UTF8.xml", CFile::modeRead);

DWORD file_len = testfile.GetLength();

char *pbuf = new char[file_len];

testfile.SeekToBegin();

testfile.Read(pbuf, file_len);

testfile.Close();

CString encodedXML = URLEncode(pbuf);

std::string response_string = "";

 

curl_easy_setopt(curl, CURLOPT_URL, "localhost:8080/eex-xmlserver/eex-xmlserver/");

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &apui_EASY_class::write_data);

curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response_string);

 

curl_formadd(&post, &last, CURLFORM_COPYNAME, "xml",

             CURLFORM_COPYCONTENTS, encodedXML,

             CURLFORM_CONTENTTYPE, "text/xml",

             CURLFORM_END);

 

curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);

  

// I tried a regular POST, but I don't think it is recognized as a request

// curl_easy_setopt(curl, CURLOPT_POSTFIELDS,pbuf);

 

// I also tried adding headers as follows

//struct curl_slist* http_header = NULL;

//http_header = curl_slist_append(http_header, "Content-Type: text/xml");

//curl_easy_setopt(curl, CURLOPT_HTTPHEADER, http_header);

 

 

CURLcode res = curl_easy_perform(curl);

AfxMessageBox(response_string.c_str());

curl_easy_cleanup(curl);

curl_formfree(post);

curl_slist_free_all(http_header);

 

Thank you,

Best regards,

 

Pascal BINETTE

IMDS Software

Software Consultant

Technical Sales Engineer

 

Tel: + 1 514 842 6367 ext. 232

Fax: + 1 514 842 3380

Email: <Mailto:pbinette_at_imds-world.com <blocked::mailto:pbinette_at_imds-world.com> >

 

IMDS scanner sales, mailroom solutions, cheque and cheque clearance processing, OCR, ICR, IWR

vente de num�riseurs, solution pour les salles courrier, traitement du ch�que et de l'encaissement, ROC, RIC, RIM

 
Received on 2009-02-17