ฉันจะโพสต์โหนดใหม่ได้อย่างไร


16

ฉันได้อ้างถึงลิงก์จำนวนมากรวมถึงลิงค์ต่อไปนี้:

ฉันลองหลายวิธีในการโพสต์โหนดใหม่ไปยังไซต์ Drupal แต่ฉันล้มเหลว ฉันสร้าง CCK ตัวอย่างสำหรับเก็บข้อมูลนักเรียนด้วยชื่ออายุเพศ DOB และเพิ่มบางรายการ

ฉันได้ติดตั้งและกำหนดค่าโมดูลบริการ (D7) แล้วและสร้างจุดสิ้นสุดบริการที่บริการ
ตามที่คาดไว้ GET เป็นวิธีที่ง่ายที่สุดในการรับรายละเอียดของโหนดใน JSON http://localhost/drupal/services/nodeเพียงแค่รายการโหนดทั้งหมด

ฉันยังไม่สามารถหาวิธีใช้วิธีการPOSTได้

  1. ฉันต้องการจะค้นหาสำหรับนักเรียนที่มีชื่อมีจอห์น ฉันพยายามlocalhost/drupal/services/node&node[name]=johnแล้ว ฉันใช้ ปลั๊กอินPOST Manสำหรับ Chrome โดยไม่สำเร็จ ฉันลองวิธีอื่นด้วย

  2. ฉันพยายามเพิ่มนักเรียนใหม่ในเว็บไซต์โดยไม่ประสบความสำเร็จ

ใครช่วยแนะนำให้ฉันทำงานข้างต้นได้ดี

อัปเดต:

ฉันพยายามเพิ่มโหนดประเภทบทความใหม่ มันใช้งานได้ดี แต่เมื่อฉันพยายามเพิ่มโหนดประเภทกรม CCKมันแสดง " s: 22:" การตรวจสอบ CSRF ล้มเหลว "; " นี่คือภาพหน้าจอ

ฉันได้ไปที่ลิงค์https://drupal.org/node/2013781

ฉันติดตาม session = session_name = session_id แต่ฉันยังคงได้รับข้อผิดพลาด
ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่


จะเกิดอะไรขึ้นเมื่อคุณพยายามโพสต์โหนด คุณได้รับข้อความแสดงข้อผิดพลาดหรือไม่? ถ้าเป็นเช่นนั้นมันคืออะไร?
Gaelan

คำตอบ:


22

หวังว่านี่จะช่วยคุณได้

สำหรับ Drupal 7

เครื่องมือที่ใช้:

  • ส่วนเสริมของ Firefox Posterทำการทดสอบและแก้ไขข้อบกพร่อง อาจมีแอดออนอื่น ๆ เช่นกัน แต่สำหรับตัวอย่างนี้ฉันใช้โปรแกรมเสริมของ Firefox
  • เพื่อช่วยแก้ไขและตรวจสอบความถูกต้องของข้อมูล JSON ที่คุณสามารถใช้ได้
    • แก้ไขข้อมูล JSON โดยใช้ลิงก์นี้
    • ตรวจสอบข้อมูล JSON โดยใช้ลิงก์นี้

คำขอ HTTP

  • ที่จะทำให้การร้องขอ HTTP ที่คุณจะต้องใช้ Firefox Add-on โปสเตอร์

  • สองวิธีที่ใช้กันทั่วไปสำหรับการตอบสนองคำขอระหว่างลูกค้าและเซิร์ฟเวอร์คือ:

    • GET
    • โพสต์
  • หลังจากดาวน์โหลดแอดออนแล้ว เปิดFirefox -> เครื่องมือ -> โปสเตอร์

    ป้อนคำอธิบายรูปภาพที่นี่

  • ให้แน่ใจว่าจะเปิดใช้งานการตรวจสอบเซสชัน หลังจากที่บริการมีการกำหนดค่าอย่างถูกต้องก่อนที่จะสร้างโหนดคุณควรเข้าสู่ระบบใน เมื่อเข้าสู่ระบบคุณสามารถสร้างโหนด

  • สำหรับการเข้าสู่ระบบใช้วิธีการ POST โดยมี URL เช่น - http://XXXXXXXX.com/demo/rulebook/rulebook_endpoint/user/login

    ป้อนคำอธิบายรูปภาพที่นี่

  • ถ้าเป็นผู้ใช้ที่ถูกต้องแล้วก็จะกลับมาดูรายละเอียดของผู้ใช้กับID เซสชั่นและชื่อ หากไม่ถูกต้องจะส่งคืนการเข้าถึงถูกปฏิเสธ

    ป้อนคำอธิบายรูปภาพที่นี่

  • โดยใช้ชื่อเซสชันและ ID ใน POST HEADER เราสามารถสร้างโหนดใหม่ได้

    ป้อนคำอธิบายรูปภาพที่นี่

  • ตอนนี้หลังจากเพิ่ม HEADER คุณต้องทำการร้องขอ HTTP POST และตรวจสอบให้แน่ใจว่าผู้ใช้ควรมีสิทธิ์ในการสร้างโหนด

    ป้อนคำอธิบายรูปภาพที่นี่

  • หากโหนดถูกสร้างขึ้นคุณจะได้รับการตอบสนองด้วยการเชื่อมโยงโหนด

    ป้อนคำอธิบายรูปภาพที่นี่

หมายเหตุ: หากคุณต้องการคำตอบใน JSON คุณควรผนวก. json ที่ท้าย URL เสมอ เช่น. http://XXXXXXXX.com/test/endpoint/user.jsonหรือhttp://XXXXXXXXX.com/test/endpoint/node.jsonหรือhttp://XXXXXXXX.com/test/endpoint/user/user_id .jsonหรือhttp://XXXXXXXX.com/test/endpoint/node/node_id.json


ขออภัยฉันยกเลิกการเลือกตัวเลือก URL ที่เข้ารหัสในโมดูลบริการ และนี่คือการตอบสนอง 401: ไม่ได้รับอนุญาต: การอนุญาต CSRF ล้มเหลว สิ่งที่อาจทำให้เกิดสิ่งนี้ ขอบคุณมาก
Ramaraju.d

สวัสดี @inizio ฉันอาจรู้ได้ว่าคุณกำหนดค่าเซสชันใน HEADERS พื้นฐานใด คุณสามารถทำให้มันชัดเจน ตัวอย่าง sessionId ที่ฉันได้รับคือ SESS29af1facda0a866a687d5055f2fade2c แต่คำตอบของคุณมีความยาวมากกว่า!
Ramaraju.d

ค่าเซสชันใน HEADERS ประกอบด้วย session_name และ session_id เช่น. session คือตัวแปรและค่าของมันประกอบด้วย session_name = session_id session = (session_name = session_value)
inizio

มันบอกว่า 401: ไม่ได้รับอนุญาต: การตรวจสอบ CSRF ล้มเหลว ฉันให้สิ่งต่อไปนี้เป็นชื่อส่วนหัว = ค่าเซสชัน = SESS29af1facda0a866a687d5055f2fade2c = gBVoqtkN2ZNjDyOjIfpz47oQpnmCKytcgHOCHZhKRzo
Ramaraju.d

ใช่มันใช้งานได้ แต่ปัญหาเดียวเท่านั้นบทความ CCK มีชื่อเรื่องชื่อฟิลด์เนื้อหา แต่ชื่อเท่านั้นที่ถูกบันทึกและสร้างโหนด แต่ฟิลด์เนื้อหาและชื่อว่างเปล่า วิธีที่จะเอาชนะสิ่งนี้
Ramaraju.d

7

สำหรับ Drupal 7 และบริการ 7.x-3.x

ขั้นตอนที่ 1:ส่งคำขอโพสต์ไปยังuser.loginแหล่งข้อมูลด้วยชื่อผู้ใช้และรหัสผ่านของคุณ

หากการเข้าสู่ระบบสำเร็จคุณจะได้รับออบเจคการตอบสนองที่มีคุณสมบัติ 4 อย่าง:

  • session_name
  • sessid
  • เหรียญ
  • ผู้ใช้ (วัตถุ)

ภาพหน้าจอจากบุรุษไปรษณีย์ Google chrome ภาพหน้าจอจากบุรุษไปรษณีย์ Google chrome

ขั้นตอนที่ 2:ออกคำขอโพสต์ถึงnodeด้วย 2 ส่วนหัว

  • คุกกี้: [session_name] = [sessid]
  • X-CSRF-Token: [โทเค็น]

ภาพหน้าจอจากบุรุษไปรษณีย์ Google chrome ภาพหน้าจอจากบุรุษไปรษณีย์ Google chrome


ฉันพยายามที่จะ <endpoint> ผู้ใช้ /user.login แต่ไม่ใช่ repsonse: prntscr.com/gru4y6 - ไม่แน่ใจว่าฉันทำอะไรผิด
Patoshi パトシ

0

ถ้าคุณทำโพสต์ไปยังREST APIแล้วคุณจะต้องใส่ทุกอย่างลงในข้อมูล POSTไม่URL ในบุรุษไปรษณีย์คุณสามารถตั้งค่าคำขอให้โพสต์กว่าพิมพ์เป็นx-www-form-urlencodedและด้านล่างที่คุณสามารถเพิ่มค่าข้อมูลของคุณ อย่าลืมเพิ่มสถานะ, uid, ภาษา, ประเภท, ชื่อและจากนั้นค่าพิเศษ URL HOST/REST_API_PATH/nodeทรัพยากรควรจะมีเพียง


1
สับสนเล็กน้อย คุณสามารถบอกฉันได้ไหมว่าอะไรควรเป็นพารามิเตอร์ในการสร้างบทความใหม่ หากคุณไม่รังเกียจคุณสามารถโพสต์ตัวอย่างหรือลิงค์เพื่อที่ฉันจะได้มีแนวคิดที่ชัดเจน!
Ramaraju.d
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.