Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php curl将XML数据发送到webservice_Php_Xml_Curl - Fatal编程技术网

使用php curl将XML数据发送到webservice

使用php curl将XML数据发送到webservice,php,xml,curl,Php,Xml,Curl,我正在制作arzoo的飞行API。服务器必须在简单POST请求中接收已发布的数据。为了实现这一点,我使用了PHP cURL。API文件中明确提到数据应以以下格式发送: <AvailRequest> <Trip>ONE</Trip> <Origin>BOM</Origin> <Destination>NYC</Destination> <Depa

我正在制作arzoo的飞行API。服务器必须在简单POST请求中接收已发布的数据。为了实现这一点,我使用了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>

我没有得到任何回应。我已经和API提供者谈过了,但是他们在日志中发现了空请求。我是不是错过了一些东西。如蒙答复,不胜感激。谢谢。

在与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>';
//将XML请求存储在变量中
$input\u xml='1
一个
物料清单
肯尼迪
2013-09-15
2013-09-16
1.
0
0
印度卢比
E
真的
777客户ID
*您的API密码
ArzooINTLWS1.0
';
现在,我对上面的curl_setopt声明做了如下一些更改:

$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);
    }
    $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>');
$url=”http://59.162.33.102:9301/Avalability";
//设置旋度参数。
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$URL);
//必须按原样添加以下行:
curl_setopt($ch,CURLOPT_POSTFIELDS,
“xmlRequest=”.$input_xml);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,300);
$data=curl\u exec($ch);
卷曲关闭($ch);
//将XML结果转换为数组
$array_data=json_decode(json_encode(simplexml_load_string($data)),true);
印刷品(“”);
打印(数组数据);
印刷品(“”);

就是这样,代码对我来说绝对有效。我真的很感谢@hakre和@Lucas对我的大力支持。

之前的anwser工作得很好。我只想补充一点,您不需要将CURLOPT_POSTFIELDS指定为
“xmlRequest=”$输入\u xml
阅读您的$\u帖子。您可以使用
文件获取内容('php://input“)
以普通XML的形式获取原始post数据。

检查此项。它会起作用的

函数获取($i1、$i2、$i3、$i4)
{
$input_data=
“.$i1。”
“.$12。”
“.$12。”
“.$13。”
';
$curl=curl_init();
curl_setopt_数组($curl,数组(
CURLOPT_端口=>“8080”,
CURLOPT_URL=>”http://192.168.1.100:8080/avaliablity",
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_编码=>“”,
CURLOPT_MAXREDIRS=>10,
CULLOPT_超时=>30,
CURLOPT_HTTP_VERSION=>CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST=>“POST”,
CURLOPT_POSTFIELDS=>$input_数据,
CURLOPT_HTTPHEADER=>数组(
“缓存控制:无缓存”,
“内容类型:应用程序/xml”
),
));
$response=curl\u exec($curl);
$err=curl\u error($curl);
curl_close($curl);
如果($err){
echo“cURL Error:”$err;
}否则{
回音$应答;
}
}
获取('i1','i2','i3','i4');

如果您使用的是共享主机,那么您的主机提供商可能会禁用出站端口。因此,请联系您的主机提供商,他们将为您打开出站端口

在检查错误之前尝试执行请求,例如:
if(curl_exec($ch)==false)echo“curl error:”。旋度误差($ch)if($response==false)
。Curl error 0表示没有错误,因此您仍然有一个空响应,该响应通过
==
计算为
false
。我在curl命令行中也提出了同样的请求,但我只得到了一个200 OK的空体。可能是@Lucas的副本:感谢您的友好回复,我可能通过您的解决方案和再次尝试错误来解决这个问题。我真的很感谢你在这个问题上给予我充足的时间。在hakre:感谢您的合作和对所述问题的处理。上述评论中共享的链接与我所面临的问题完全相似。我通过简单地添加curl_setopt($ch,CURLOPT_POSTFIELDS,“xmlRequest=”.$input_xml)得到了服务器的响应;以及最后一个解码响应的json代码。谢谢你们两位。我真的很感谢你的工作和支持。对我来说,上面的代码不起作用。返回的XML无效。但是下面的回答确实帮助了我这个xml新手,如何动态地使用$input_xml。我的意思是,值来自一个表单,并使用$POST传递它?非常感谢,它保存了我的项目!
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');