Я пытаюсь вытащить XML-страницу из калькулятора скорости почтовой службы США (USPS), используя PHP. Вот код, который я использую (с моим логином и паролем 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. Любая помощь будет чрезвычайно оценена. Заранее спасибо.
Одно дело, что вам нужно URL-кодировать XML-код, который вы отправляете в службу. Браузер сделает это автоматически, но 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
есть ошибка.