سؤال

ربما أكون بعيدًا عن القاعدة، لكني كنت أحاول الهرب طوال فترة ما بعد الظهر أمر آخر الضفيرة في هذه العطلة البرنامج التعليمي لإطار عمل 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top