2012-06-27 54 views
1

我正在嘗試使用PHP從美國郵政服務(USPS)費率計算器中提取XML頁面。這裏是我使用的代碼(當然我的API登錄名和密碼被替換):使用Web 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捕獲它。任何幫助將非常感激。提前致謝。

回答

3

有一件事是,你需要對你發送到服務的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有錯誤。