سؤال

وإذا كنت تستخدم فايرفوكس والوصول http://svcs.ebay.com/services / بحث / FindingService / V1 I الحصول على نوع من XML في respose، عندما أفعل ذلك من خلال PHP أحصل على خطأ خادم داخلي 500

$ php -r 'print_r(simplexml_load_file("http://svcs.ebay.com/services/search/FindingService/v1"));'
PHP Warning:  simplexml_load_file(http://svcs.ebay.com/services/search/FindingService/v1): failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error
 in Command line code on line 1
PHP Stack trace:
PHP   1. {main}() Command line code:0
PHP   2. simplexml_load_file() Command line code:1
PHP Warning:  simplexml_load_file(): I/O warning : failed to load external entity "http://svcs.ebay.com/services/search/FindingService/v1" in Command line code on line 1
PHP Stack trace:
PHP   1. {main}() Command line code:0
PHP   2. simplexml_load_file() Command line code:1
$ 
هل كانت مفيدة؟

المحلول

وعندما أزور http://svcs.ebay.com/services/search/ FindingService / V1 في فايرفوكس، تقارير الحرائق التي رمز HTTP أن reponse هو في الواقع 500. (على الرغم من أنه يرسل بعض XML في الجسم الطلب)

أنت استدعاء خدمة الويب بطريقة خاطئة.

نعم، كنت حصلت XML مرة أخرى، ولكن رمز الاستجابة هو 500، وهذا يعني URL الخاص بك غير صحيح.

ودعوة ximlexml_load_file عبر مغلفة رابط تتوقع رمز النجاح.

وقال ذلك، ربما يمكن الحصول على البيانات على أي حال. ربما.

ولكن يجب عليك معرفة كيف تريد خدمة لك الاستعلام.

نصائح أخرى

إذا كنت تريد أن تكون قادرة على قراءة 500 طلب استخدام البيانات حليقة

<?php
// create a new cURL resource
$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, "http://svcs.ebay.com/services/search/FindingService/v1");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// grab URL and pass it to the browser
$xml = curl_exec($ch);
$simpleXml = simplexml_load_string($xml);
// close cURL resource, and free up system resources
curl_close($ch);
?>

وعندما أذهب إلى هذا الموقع، وأحصل على:

<ms:errorMessage>
−
<error>
<errorId>2038</errorId>
<domain>SOA</domain>
<severity>Error</severity>
<category>System</category>
<message>Missing SOA operation name header</message>
</error>
</ms:errorMessage>

وهكذا يبدو أن هذا العنوان هو لخدمة الويب وربما يتطلب نوعا من التوثيق أو في البيانات أقل مساهمة في رأس الطلب. استجابة HTTP 500، وفقا لويكيبيديا، هو خطأ عام وهذا يعني أن الخادم لا يمكن تحديد المشكلة ولكن يعلم كان هناك واحد. وإليك أفضل جزء من تلك المادة:

<اقتباس فقرة>   

ورموز الحالة الاستجابة تبدأ مع   الرقم "5" تشير إلى الحالات التي   خادم يدرك أن لديها   واجه خطأ أو غير ذلك   غير قادرة على تنفيذ الطلب.   إلا عندما يرد على الرأس   طلب، ينبغي أن تتضمن الملقم   كيان تحتوي على شرح ل   الوضع الخطأ، وتشير   سواء كانت مؤقتة أو دائمة   الشرط.

وكل ذلك جنبا إلى جنب، ويهمني أن أقول مشكلتك هي أن لديك تحاول انتزاع ملف من الملقم البعيد باستخدام الطريقة التي يفترض أن لديك بعض بالوصول لمستوى الدليل لهذا الملف، وخادم يستجيب مع "أم، ماذا؟"

إذا كنت ترغب في الحصول على خطأ XML الفعلي كما لو كنت في فايرفوكس، واستخدام الضفيرة:

$ebay_url = "http://svcs.ebay.com/services/search/FindingService/v1";
$ebay_page = curl_init();

curl_setopt($ebay_page, CURLOPT_RETURNTRANSFER, true); //output to string.
curl_setopt($ebay_page, CURLOPT_URL, $ebay_url); //set the url for the request.

$ebay_response = curl_exec($ebay_page);

print_r(simplexml_load_string($ebay_response));

إذا كنت تريد فعلا الحصول على شيء يعود أكثر وضوحا، وأود أن ننظر في PHP <لأ href = "http://us.php.net/manual/en/class.soapclient.php" يختلط = "نوفولو noreferrer" > طرق SoapClient والوثائق الفعلية خدمة الإنترنت موقع ئي باي .

ووHTTP تحتاج إلى أن توضع تحديد العملية رؤوس ليتم تنفيذها. إذا كنت تقرأ كيفية إجراء مكالمة باستخدام هذا الاكتشاف API ، و يذكر المقالة عناوين http التالية التي تحتاج إلى تعيين:

X-EBAY-SOA-SERVICE-NAME: FindingService
X-EBAY-SOA-OPERATION-NAME: findItemsAdvanced <-- whatever call you are making
X-EBAY-SOA-SERVICE-VERSION: 1.0.0
X-EBAY-SOA-GLOBAL-ID: EBAY-US
X-EBAY-SOA-SECURITY-APPNAME: MyAppID
X-EBAY-SOA-REQUEST-DATA-FORMAT: XML
X-EBAY-SOA-MESSAGE-PROTOCOL: XML

وحالما يتم تعيين تلك المكالمة، فهذه تعمل بشكل جيد.

وربما كنت ترغب في محاولة URL التالية. عندما أقوم به، وأعود لXML واستجابة 200.

وhttp://svcs.ebay.com/services/search/FindingService/v1?wsdl

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top