Как мне разместить новый узел?

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, но я все еще получаю ошибку.
введите описание изображения здесь введите описание изображения здесь введите описание изображения здесь

Ramaraju.d
источник
Что происходит, когда вы пытаетесь POST-узел? Вы получаете сообщение об ошибке? Если так, то, что это?
Галан

Ответы:

22

Надеюсь, что это поможет вам,

Для Drupal 7

Используемые инструменты:

  • Дополнение к Firefox Poster для тестирования и отладки. Могут быть и другие дополнения. Но для этого примера я использую дополнение Firefox.
  • Чтобы помочь редактировать и проверять данные JSON, вы можете использовать
    • Отредактируйте данные JSON, используя эту ссылку
    • Проверьте данные JSON, используя эту ссылку

HTTP-запросы

  • Чтобы сделать HTTP-запросы, вам нужно использовать надстройку Firefox POSTER .

  • Два часто используемых метода для запроса-ответа между клиентом и сервером:

    • ПОЛУЧИТЬ
    • ПОЧТА
  • После того, как дополнение загружено. Откройте Firefox -> Инструменты -> Плакат

    введите описание изображения здесь

  • Убедитесь, что включена аутентификация сеанса . После правильной настройки Сервисов , перед созданием узла необходимо войти в систему . После входа в систему вы можете создавать узлы.

  • Для входа используйте метод POST, с URL-адресом, таким как - http://XXXXXXXX.com/demo/rulebook/rulebook_endpoint/user/login

    введите описание изображения здесь

  • Если это действительный пользователь, он вернет данные пользователя с идентификатором сеанса и именем . Если он недействителен, он вернет Доступ запрещен

    введите описание изображения здесь

  • Используя имя и идентификатор сеанса в заголовке POST, мы можем создавать новые узлы

    введите описание изображения здесь

  • Теперь, после добавления HEADER, вам нужно сделать HTTP-запрос POST и убедиться, что у пользователя есть права на создание узла.

    введите описание изображения здесь

  • Если узел создан, вы получите ответ с ссылкой на узел

    введите описание изображения здесь

ПРИМЕЧАНИЕ. Если вы хотите получить ответ в формате JSON, всегда добавляйте .json в конце URL-адреса. например, 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

Inizio
источник
Извините, я снял флажок с опцией закодированной формы в сервисном модуле. и вот ответ 401: Несанкционированный: авторизация CSRF не удалась. что может быть причиной этого? Большое спасибо
Ramaraju.d
Привет, @inizio. Могу ли я узнать, на каком основании вы присвоили значение сеанса в заголовках. Можете ли вы сделать это ясно. Например, сессия, которую я получил, является SESS29af1facda0a866a687d5055f2fade2c, но в вашем ответе она имеет большую длину!
Ramaraju.d
Значение сеанса в заголовках состоит из имени_сессии и идентификатора_сессии. т.е. сессия является переменной, и ее значение состоит из session_name = session_id. session = (session_name = session_value)
inizio
Это говорит 401: Несанкционированный: проверка CSRF не удалась. В качестве заголовков я дал следующее имя = значение сеанса = SESS29af1facda0a866a687d5055f2fade2c = gBVoqtkN2ZNjDyOjIfpz47oQpnmCKytcgHOCHZhKRzo
Ramaraju.d
Да, это сработало. Но единственная проблема, в статье CCK есть заголовок, field_names, body, но сохраняется только заголовок и создается узел, но поле body и names пустое. Как это побороть.
Ramaraju.d
7

Для Drupal 7 и Сервисов 7.x-3.x

Шаг 1: Отправьте почтовый запрос на user.loginресурс с вашим именем пользователя и паролем.

Если вход выполнен успешно, вы получите объект ответа с 4 свойствами:

  • session_name
  • sessid
  • знак
  • пользователь (объект)

Скриншот из Google Chrome Почтальон Скриншот из Google Chrome Почтальон

Шаг 2. Отправьте почтовый запрос nodeс двумя заголовками.

  • Cookie: [session_name] = [sessid]
  • X-CSRF-токен: [токен]

Скриншот из Google Chrome Почтальон Скриншот из Google Chrome Почтальон

Мухаммед Реда
источник
Я пытался использовать <endpoint> /user.login, но это не repsonse: prntscr.com/gru4y6 - не уверен, что я делаю неправильно.
Патоши シ ト シ
0

Если вы выполняете POST для REST API, вам придется поместить все в данные POST , а не в URL . В Почтальоне вы можете установить запрос на публикацию, а затем введите x-www-form-urlencodedи ниже, что вы можете добавить свои значения данных. Не забудьте добавить статус, uid, язык, тип, заголовок, а затем дополнительные значения. URL ресурса должен быть только HOST/REST_API_PATH/node.

itarato
источник
1
Немного смущает. Хорошо, вы можете сказать мне, какие должны быть параметры для создания новой статьи.? Если вы не возражаете, вы можете опубликовать пример или ссылку, чтобы у меня была четкая концепция!
Ramaraju.d