كيفية نشر JSON إلى PHP باستخدام حليقة
سؤال
ربما أكون بعيدًا عن القاعدة، لكني كنت أحاول الهرب طوال فترة ما بعد الظهر أمر آخر الضفيرة في هذه العطلة البرنامج التعليمي لإطار عمل PHP.ما لا أفهمه هو كيف من المفترض أن تفسر PHP POST الخاص بي، فهي تظهر دائمًا كمصفوفة فارغة.
curl -i -X POST -d '{"screencast":{"subject":"tools"}}' \
http://localhost:3570/index.php/trainingServer/screencast.json
(الشرطة المائلة الموجودة هنا هي فقط لتجعلني لا أبدو كأحمق، لكنني نفذت هذا من Windows باستخدام PHP 5.2، كما جربته على خادم Linux، نفس الإصدار مع Linux Curl)
يجب أن يكون هناك شيء أفتقده لأنه يبدو واضحًا جدًا، لم يتم تفسير المنشور بشكل صحيح، وإذا كان الأمر كذلك، فسيعمل كل شيء بشكل رائع.
وهذا ما أعود إليه:
HTTP/1.1 409 Conflict Date: Fri, 01 May 2009 22:03:00 GMT Server: Apache/2.2.8 (Win32) PHP/5.2.6 X-Powered-By: PHP/5.2.6 Transfer-Encoding: chunked Content-Type: text/html; charset=iso-8859-1 {"screencast":{"id":null,"subject":null,"body":null, "dataUrl":null,"dataMedium":null,"createdOn":null,"author":null}}
المحلول
وتحليل الأردن لماذا لا يتم تعبئة $ _POST مصفوفة صحيحة. ومع ذلك، يمكنك استخدام
$data = file_get_contents("php://input");
ولاسترداد الجسم فقط HTTP والتعامل مع ذلك بنفسك. انظر PHP الإدخال / الإخراج تيارات .
ومن منظور بروتوكول وهذا هو في الواقع أكثر صحيح، منذ كنت لا يعالج حقا HTTP بيانات النموذج متعددة على أي حال. أيضا، الاستخدام والتطبيق / سلمان كمحتوى من نوع عند نشر طلبك.
نصائح أخرى
وعادة يتم تفسير -d
المعلمة كما المشفرة شكل. كنت في حاجة إلى المعلمة -H
:
curl -v -H "Content-Type: application/json" -X POST -d '{"screencast":{"subject":"tools"}}' \
http://localhost:3570/index.php/trainingServer/screencast.json
وأعتقد أنك تحصل على مجموعة فارغة بسبب PHP تتوقع البيانات التي تم نشرها لتكون في شكل سلسلة استعلام مواقع المعلومات (مفتاح = قيمة وkey1 = VALUE1).
وحاول تغيير طلب حليقة ل:
curl -i -X POST -d 'json={"screencast":{"subject":"tools"}}' \
http://localhost:3570/index.php/trainingServer/screencast.json
ونرى اذا كان ذلك يساعد أي.
تحتاج إلى تعيين بعض العلامات الإضافية بحيث يرسل الضفيرة البيانات بتنسيق JSON.
يأمر
$ curl -H "Content-Type: application/json" \
-X POST \
-d '{"JSON": "HERE"}' \
http://localhost:3000/api/url
أعلام
-H
:رأس مخصص، من المتوقع أن تكون الوسيطة التالية هي header-X
:فعل HTTP مخصص، ومن المتوقع أن تكون الوسيطة التالية فعلًا-d
:يرسل الوسيطة التالية كبيانات في طلب HTTP POST
موارد
ويجب عليك الهروب من يقتبس من هذا القبيل:
curl -i -X POST -d '{\"screencast\":{\"subject\":\"tools\"}}' \
http://localhost:3570/index.php/trainingServer/screencast.json