1

PHP を使用して、US Postal Service (USPS) 料金計算機から XML ページを取得しようとしています。これが私が使用しているコードです(もちろん、APIログインとパスワードを置き換えています):

<?
$api = "http://production.shippingapis.com/ShippingAPI.dll?API=RateV4&XML=<RateV4Request ".
       "USERID=\"MYUSERID\" PASSWORD=\"MYPASSWORD\"><Revision/><Package ID=\"1ST\">".
       "<Service>FIRST CLASS</Service><FirstClassMailType>PARCEL</FirstClassMailType>".
       "<ZipOrigination>12345</ZipOrigination><ZipDestination>54321</ZipDestination>".
       "<Pounds>0</Pounds><Ounces>9</Ounces><Container/><Size>REGULAR</Size></Package></RateV4Request>";

$xml_string = file_get_contents($api); 

$xml = simplexml_load_string($xml_string);
?>

かなり簡単です。ただし、何も返されません。URL をブラウザのアドレス バーに直接貼り付けることができます。

http://production.shippingapis.com/ShippingAPI.dll?API=RateV4&XML=<RateV4RequestUSERID="MYUSERID" PASSWORD="MYPASSWORD"><Revision/><Package ID="1ST"><Service>FIRST CLASS</Service><FirstClassMailType>PARCEL</FirstClassMailType><ZipOrigination>12345</ZipOrigination><ZipDestination>54321</ZipDestination><Pounds>0</Pounds><Ounces>9</Ounces><Container/><Size>REGULAR</Size></Package></RateV4Request>

必要な XML が返されるので、URL が有効であることがわかります。しかし、PHPを使用してキャプチャすることはできません。どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

3

1 つは、サービスに送信する XML を URL エンコードする必要があることです。ブラウザは自動的にそれを行いますが、そうしfile_get_contentsません。

これを試して:

 $param = urlencode("<RateV4Request ".
   "USERID=\"MYUSERID\" PASSWORD=\"MYPASSWORD\"><Revision/><Package ID=\"1ST\">".
   "<Service>FIRST CLASS</Service><FirstClassMailType>PARCEL</FirstClassMailType>".
   "<ZipOrigination>12345</ZipOrigination><ZipDestination>54321</ZipDestination>".
   "<Pounds>0</Pounds><Ounces>9</Ounces><Container/><Size>REGULAR</Size></Package></RateV4Request>");

 $api = "http://production.shippingapis.com/ShippingAPI.dll?API=RateV4&XML="
        .$param;

 ... then the rest of the code

それでも問題が解決しない場合は、エラー報告が有効になっていることを確認して、エラーが発生した場合に応答が得られるようfile_get_contentsにしてください。

于 2012-06-27T21:13:20.843 に答える