新しいノードをPOSTするにはどうすればよいですか?


16

以下を含む多くのリンクを参照しました。

Drupalサイトに新しいノードをPOSTする方法をいくつか試しましたが、失敗しました。名前、年齢、性別、DOBを含む学生データを保存するためのサンプルCCKを作成し、リストを追加しました。

サービスモジュール(D7)をインストールして構成し、サービスでサービスエンドポイントを作成しました。
予想どおり、GETはJSONでノードの詳細を取得する最も簡単な方法です。http://localhost/drupal/services/node単にすべてのノードをリストしました。

POSTメソッドの使用方法がまだわかりません。

  1. 名前にjohnが含まれる学生を検索したいです。試しましたlocalhost/drupal/services/node&node[name]=john。成功せずにChromeのPOST Manプラグインを使用し ました。他の方法も試しました。

  2. 成功せずにサイトに新しい学生を追加しようとしました。

誰でも上記の仕事をうまくするために私を導くことができますか?

更新:

タイプの記事の新しいノードを追加してみました。うまくいきました。しかし、タイプが部門CCKのノードを追加しようとすると、「s:22:」CSRF検証に失敗しました」と表示されます;「ここにスクリーンショットがあります

リンクhttps://drupal.org/node/2013781を通過しました

session = session_name = session_idに従いましたが、それでもエラーが発生します。
ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してください


ノードをPOSTしようとするとどうなりますか?エラーメッセージが表示されますか?もしそうなら、それは何ですか?
ゲーラン

回答:


22

これがあなたを助けることを願っています、

Drupal 7の場合

使用したツール:

  • テストとデバッグを行うためのFirefox Posterアドオン。他のアドオンもあります。ただし、この例ではFirefoxアドオンを使用しています。
  • 使用できるJSONデータの編集と検証を支援するために
    • このリンクを使用してJSONデータを編集します
    • このリンクを使用してJSONデータを検証する

HTTPリクエスト

  • HTTPリクエストを行うには、FirefoxアドオンPOSTERを使用する必要があります。

  • クライアントとサーバー間のリクエスト/レスポンスでよく使用される2つの方法は次のとおりです。

    • 取得する
    • 役職
  • アドオンがダウンロードされた後。Firefoxを開く->ツール->ポスター

    ここに画像の説明を入力してください

  • セッション認証を有効にしてください。後はサービスのあなたがすべきノード作成する前に、適切に設定されているログインを。ログインしたら、ノードを作成できます。

  • ログインには、次のようなURLでPOSTメソッドを使用します-http://XXXXXXXX.com/demo/rulebook/rulebook_endpoint/user/login

    ここに画像の説明を入力してください

  • 有効なユーザーである場合セッションIDとNameを使用してユーザーの詳細を返します。有効でない場合は、アクセス拒否が返されます

    ここに画像の説明を入力してください

  • POST HEADERでセッション名とIDを使用することにより、新しいノードを作成できます

    ここに画像の説明を入力してください

  • HEADERを追加したら、HTTP POSTリクエストを作成し、ユーザーがノードを作成する権限を持っていることを確認する必要があります。

    ここに画像の説明を入力してください

  • ノードが作成された場合、ノードリンクで応答を取得します

    ここに画像の説明を入力してください

注:その場合、JSONでの応答が必要な場合は、URLの最後に常に.jsonを追加する必要があります。例:http : //XXXXXXXX.com/test/endpoint/user.jsonまたはhttp://XXXXXXXX.com/test/endpoint/node.jsonまたはhttp://XXXXXXXX.com/test/endpoint/user/user_id .jsonまたはhttp://XXXXXXXX.com/test/endpoint/node/node_id.json


申し訳ありませんが、servicesモジュールのform url-encodedオプションのチェックを外しました。応答401があります:Unauthorized:CSRF認証が失敗しました。何がこれを引き起こしているのでしょうか?多くの感謝
Ramaraju.d

こんにちは@inizioは、HEADERSでセッション値をどの基準で割り当てたのかを知ることができます。はっきりさせてください。たとえば、私が得たsessionIdはSESS29af1facda0a866a687d5055f2fade2cですが、あなたの答えではより長いです!
Ramaraju.d

HEADERSのセッション値は、session_nameとsession_idで構成されます。つまり、セッションは変数であり、その値はsession_name = session_idで構成されます。セッション=(session_name = session_value)
inizio

401:Unauthorized:CSRF検証に失敗しました。ヘッダーとして以下を指定しましたname = session value = SESS29af1facda0a866a687d5055f2fade2c = gBVoqtkN2ZNjDyOjIfpz47oQpnmCKytcgHOCHZhKRzo
Ramaraju.d

はい、うまくいきました。ただし、唯一の問題は、The Article CCKにはtitle、field_names、bodyがありますが、titleのみが保存され、ノードが作成されますが、bodyおよびnamesフィールドは空です。これを克服する方法。
Ramaraju.d

7

Drupal 7およびサービス7.x-3.xの場合

ステップ1:user.loginユーザー名とパスワードを使用してリソースに投稿リクエストを発行します。

ログインに成功すると、4つのプロパティを持つ応答オブジェクトが取得されます。

  • session_name
  • セシド
  • トークン
  • ユーザー(オブジェクト)

Google Chrome Postmanのスクリーンショット Google Chrome Postmanのスクリーンショット

ステップ2:node 2つのヘッダーを使用して送信リクエストを発行する

  • Cookie:[session_name] = [sessid]
  • X-CSRF-Token:[トークン]

Google Chrome Postmanのスクリーンショット Google Chrome Postmanのスクリーンショット


ユーザー<endpoint> /user.loginを試みましたが、その応答ではありません:prntscr.com/gru4y6-何が間違っているのかわかりません。
パトシパトシ

0

その場合はPOSTをするREST APIをあなたがにすべてを置く必要がありますPOSTデータではないため、URLPostmanでは、リクエストを投稿するように設定できますが、x-www-form-urlencodedその下に入力するとデータ値を追加できます。ステータス、uid、言語、タイプ、タイトルを追加してから追加の値を追加することを忘れないでください。リソースURLはのみである必要がありHOST/REST_API_PATH/nodeます。


1
少しわかりにくい。OK、新しい記事を作成するためのパラメーターはどうあるべきか教えてください。あなたが気にしないなら、私が明確な概念を持つことができるように、あなたは例またはリンクを投稿することができます!
Ramaraju.d
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.