代码之家  ›  专栏  ›  技术社区  ›  Satu Sultana

用于XML的curl命令无法通过php脚本发送

  •  0
  • Satu Sultana  · 技术社区  · 5 年前

    我使用这个Linux命令来发送XML curl请求

    curl -f -d 
               '<REQ>
                   <FEATURE>COMMON</FEATURE>
                   <TIME-STAMP>ddmmyyyy HH:MM:SS</TIME-STAMP>
                   <OPERATION-CODE>DEACTIVATE</OPERATION-CODE>
                   <CLIENT-TRANS-ID>3256778901</CLIENT-TRANS-ID>
                   <BODY>
                      <DATASET>
                         <PARAM>
                            <NAME>PRODUCT-CODE</NAME>
                            <VALUE>T-1234</VALUE>
                         </PARAM>
                         <PARAM>
                            <NAME>CP-ID</NAME>
                            <VALUE>111</VALUE>
                         </PARAM>
                         <PARAM>
                            <NAME>CHANNEL-ID</NAME>
                            <VALUE>WAP</VALUE>
                         </PARAM>
                         <ADDITIONAL-PARAM>
                            <PARAM>
                               <NAME>LANGUAGE</NAME>
                               <VALUE>1</VALUE>
                            </PARAM>
                            <PARAM>
                               <NAME>KEYWORD</NAME>
                               <VALUE>LS</VALUE>
                            </PARAM>
                         </ADDITIONAL-PARAM>
                      </DATASET>
                   </BODY>
                </REQ>' 
               'http://192.168.xx.xxx:8088/HttpAdapter'
    

    它工作得很好。

    但是当我尝试使用phpi时,会出错

    $input_xml = "<REQ>
                   <FEATURE>COMMON</FEATURE>
                   <TIME-STAMP>ddmmyyyy HH:MM:SS</TIME-STAMP>
                   <OPERATION-CODE>DEACTIVATE</OPERATION-CODE>
                   <CLIENT-TRANS-ID>3256778901</CLIENT-TRANS-ID>
                   <BODY>
                      <DATASET>
                         <PARAM>
                            <NAME>PRODUCT-CODE</NAME>
                            <VALUE>T-1234</VALUE>
                         </PARAM>
                         <PARAM>
                            <NAME>CP-ID</NAME>
                            <VALUE>111</VALUE>
                         </PARAM>
                         <PARAM>
                            <NAME>CHANNEL-ID</NAME>
                            <VALUE>WAP</VALUE>
                         </PARAM>
                         <ADDITIONAL-PARAM>
                            <PARAM>
                               <NAME>LANGUAGE</NAME>
                               <VALUE>1</VALUE>
                            </PARAM>
                            <PARAM>
                               <NAME>KEYWORD</NAME>
                               <VALUE>ls</VALUE>
                            </PARAM>
                         </ADDITIONAL-PARAM>
                      </DATASET>
                   </BODY>
                </REQ>
                ";
    
                $url = "http://192.168.xx.xxx:8088/HttpAdapter";
    
                //setting the curl parameters.
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                                                'Content-Type: application/xml',
                                                'Connection: Keep-Alive'
                                                ));
                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>');
    

    此时,我将收到“5689 FeatureID not sent with the request”。故障代码为1003。 我的PHP代码没有任何错误。如何使用php curl发送这个XML请求。

    1 回复  |  直到 5 年前
        1
  •  1
  •   hanshenrik    5 年前

    你的PHP代码已经准备好了 xmlRequest= 你的卷发代码没有,只需替换

    curl_setopt($ch, CURLOPT_POSTFIELDS, "xmlRequest=" . $input_xml);
    

    具有

    curl_setopt($ch, CURLOPT_POSTFIELDS, $input_xml);
    

    请求应该大致相似(不完全相似,例如,commandline curl有一个默认的用户代理 User-Agent: curl/7.63.0 ,而libcurl和扩展名php的curl_*api没有默认的用户代理,但是可以使用curlot_user agent设置一个)

    …同样,这两个例子都不是 应该 工作,因为在这两种情况下发送的内容类型头都是错误的,所以发送

    Content-Type: application/x-www-form-urlencoded
    

    但正确的类型应该是:

    Content-Type: application/xml
    

    …我猜服务器只是忽略了内容类型头,因为您的curl调用实际上是有效的。除非有明确的文档记录,否则这可能是一个bug,您应该让服务器开发人员知道。