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