Отправка XML-данных в webservice с помощью php curl
Я работаю над Flight API arzoo. Сервер должен получать разнесенные данные в простом почтовом запросе. Для этого я использую PHP cURL. В документе API четко указано, что данные должны быть отправлены в следующем формате:
<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>
Я взял приведенный выше код в переменной $xml. Мой PHP cURL код выглядит следующим образом:
$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);
}
Я ничего не получаю в ответ. Я говорил о том же с поставщиком API, но они нашли пустой запрос в своем журнале. Неужели я пропал? что-то с моей стороны. Ваш ответ будет оценен по достоинству. Спасибо.
3 ответов:
Немного повозившись с ARZOO International flight API, я наконец нашел решение, и код просто отлично работает со мной. Вот полный рабочий код:
//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>';Теперь я внес небольшие изменения в приведенное выше объявление curl_setopt следующим образом:
$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>');Вот именно, код работает абсолютно нормально для меня. Я очень ценю @hakre & @ Lucas за их замечательную поддержку.
Предыдущий anwser работает нормально. Я бы просто добавил, что вам не нужно указывать CURLOPT_POSTFIELDS как
"xmlRequest=" . $input_xml, чтобы прочитать ваш $_POST. Вы можете использоватьfile_get_contents('php://input')для получения необработанных данных post в виде простого XML.
Проверьте это. Это сработает.
function fetch($i1,$i2,$i3,$i4) { $input_data = '<I> <i1>'.$i1.'</i1> <i2>'.$i2.'</i2> <i3>'.$i2.'</i3> <i4>'.$i3.'</i4> </I>'; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_PORT => "8080", CURLOPT_URL => "http://192.168.1.100:8080/avaliablity", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => $input_data, CURLOPT_HTTPHEADER => array( "Cache-Control: no-cache", "Content-Type: application/xml" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; } } fetch('i1','i2','i3','i4');
Comments