-1

次のコードに対する XML 要求に対して、ファイルの終了が早すぎるという応答が返されます。

エラーがどこにあるのかわかりません。

    $xml = '<?xml version="1.0" ?>';
    $xml .= '<PickUpCityListRQ>';
    $xml .= '<Credentials username="'.$api->username.'" password="'.$api->password.'" remoteIp="'.$api->remoteIp.'" />';
    $xml .= '<Country>UK</Country>';
    $xml .= '</PickUpCityListRQ>';

    $url = 'https://secure.rentalcars.com/service/ServiceRequest.do?serverName=www.rentalcars.com&xml='.utf8_decode(trim($xml));
    $port = 443;

    $user_agent = $_SERVER['HTTP_USER_AGENT'];
    $ch = curl_init();                              // initialize curl handle
    curl_setopt($ch, CURLOPT_URL, $url);            // set url to post to
    curl_setopt($ch, CURLOPT_FAILONERROR, true);    // Fail on errors

    if (ini_get('open_basedir') == '' && ini_get('safe_mode' == 'Off'))
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);// allow redirects
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    // return into a variable
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
    curl_setopt($ch, CURLOPT_PORT, $port);          //Set the port number
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);          // times out after 15s
    //curl_setopt($ch, CURLOPT_POST, true);
    //curl_setopt($ch, CURLOPT_POSTFIELDS, '&xml='.$xml);     // add POST fields
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
    if ($port==443) {
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    }
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/xml; charset=UTF-8', 'Accept: application/xml; charset=UTF-8'));
    $data = curl_exec($ch);
    curl_close($ch);

投稿フィールドでもデータを送信しようとしましたが、うまくいきませんでした。応答:

<!DOCTYPE DefaultRS SYSTEM 'https://xml.rentalcars.com:443//tj.dtd'><DefaultRS>
<Error id="2">
<Message>Premature end of file.</Message>
</Error>
</DefaultRS>

どんな助けでも感謝します。ありがとう

4

2 に答える 2

0

多くのバリエーションを試した後、私は最終的にそれを機能させることができました。

問題を引き起こしていたことが2つありました。

utf8_decode は utf8_encode にする必要があります

POSTFIELDS データは配列であるはずです

そうしないと、パーサーは Premature end of file をスローするか、何も送り返しません。

于 2013-06-30T01:00:27.927 に答える
0

クエリ パラメータとして使用する前に、xml データを URL エンコードする必要があります。したがって、URL の割り当ては次のようになります。

$url = 'https://secure.rentalcars.com/service/ServiceRequest.do?
  serverName=www.rentalcars.com&xml='.urlencode(utf8_decode(trim($xml)));

読みやすくするためにラップしただけであることに注意してください-明らかに1行である必要があります。

于 2013-06-30T00:16:06.410 に答える