Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Send XML data to webservice using php curl

Tags:

php

curl

xml

I'm working on Flight API of arzoo. The server must receive the posted data in simple POST Request. To achieve this i'm using PHP cURL. In the API Document it is clearly mention that the data should be sent in the following format:

<AvailRequest>         <Trip>ONE</Trip>         <Origin>BOM</Origin>         <Destination>NYC</Destination>         <DepartDate>2013-09-15</DepartDate>         <ReturnDate>2013-09-16</ReturnDate>         <AdultPax>1</AdultPax>         <ChildPax>0</ChildPax>         <InfantPax>0</InfantPax>         <Currency>INR</Currency>         <Preferredclass>E</Preferredclass>         <Eticket>true</Eticket>         <Clientid>77752369</Clientid>         <Clientpassword>*AB424E52FB5ASD23YN63A099A7B747A9BAF61F8E</Clientpassword>         <Clienttype>ArzooINTLWS1.0</Clienttype>         <PreferredAirline></PreferredAirline> </AvailRequest> 

I've taken the above code in a variable $xml. My PHP cURL code is as follows:

$URL = "http://59.162.33.102:9301/Avalability";      //setting the curl parameters.     $ch = curl_init();      curl_setopt($ch, CURLOPT_URL,$URL);     curl_setopt($ch, CURLOPT_VERBOSE, 1);     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);     curl_setopt($ch, CURLOPT_POST, 1);     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);      curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));     curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);          if (curl_errno($ch))      {         // moving to display page to display curl errors           echo curl_errno($ch) ;           echo curl_error($ch);     }      else      {         //getting response from server         $response = curl_exec($ch);          print_r($response);          curl_close($ch);     } 

I'm not getting anything in response. I've spoken about the same with the API Provider but they found empty request in their log. Am i missing something from my end. Your reply will be appreciated. Thank You.

like image 654
user1549991 Avatar asked Sep 09 '13 11:09

user1549991


People also ask

How do I post XML using curl?

To post XML using Curl, you need to pass XML data to Curl with the -d command line parameter and specify the data type in the body of the POST request message using the -H Content-Type: application/xml command line parameter.

Can I send XML in REST API?

The REST API Client Service currently accepts only JSON input when making REST API Create, Read, Update, or Delete requests. It is nevertheless possible to use XML input when making REST API requests.

Can I use curl in PHP?

Uses of cURL in PHPcURL is a PHP extension that allows you to use the URL syntax to receive and submit data. cURL makes it simple to connect between various websites and domains. Obtaining a copy of a website's material.


1 Answers

After Struggling a bit with Arzoo International flight API, I've finally found the solution and the code simply works absolutely great with me. Here are the complete working code:

//Store your XML Request in a variable     $input_xml = '<AvailRequest>             <Trip>ONE</Trip>             <Origin>BOM</Origin>             <Destination>JFK</Destination>             <DepartDate>2013-09-15</DepartDate>             <ReturnDate>2013-09-16</ReturnDate>             <AdultPax>1</AdultPax>             <ChildPax>0</ChildPax>             <InfantPax>0</InfantPax>             <Currency>INR</Currency>             <PreferredClass>E</PreferredClass>             <Eticket>true</Eticket>             <Clientid>777ClientID</Clientid>             <Clientpassword>*Your API Password</Clientpassword>             <Clienttype>ArzooINTLWS1.0</Clienttype>             <PreferredAirline></PreferredAirline>     </AvailRequest>'; 

Now I've made a little changes in the above curl_setopt declaration as follows:

    $url = "http://59.162.33.102:9301/Avalability";          //setting the curl parameters.         $ch = curl_init();         curl_setopt($ch, CURLOPT_URL, $url); // Following line is compulsary to add as it is:         curl_setopt($ch, CURLOPT_POSTFIELDS,                     "xmlRequest=" . $input_xml);         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 300);         $data = curl_exec($ch);         curl_close($ch);          //convert the XML result into array         $array_data = json_decode(json_encode(simplexml_load_string($data)), true);          print_r('<pre>');         print_r($array_data);         print_r('</pre>'); 

That's it the code works absolutely fine for me. I really appreciate @hakre & @Lucas For their wonderful support.

like image 112
user1549991 Avatar answered Sep 20 '22 03:09

user1549991