如何发布新节点?


16

我提到了许多链接,包括以下内容:

我尝试了几种方法将新节点发布到Drupal站点,但是失败了。我创建了一个示例CCK,用于存储具有姓名,年龄,性别,DOB的学生数据,并添加了一些列表。

我已经安装并配置了服务模块(D7),并在服务上创建了服务端点。
不出所料,GET是获取JSON中节点详细信息的最简单方法。http://localhost/drupal/services/node仅列出所有节点。

我仍然不知道如何使用POST方法。

  1. 我想搜索名字叫约翰的学生。我试过了localhost/drupal/services/node&node[name]=john。我为Chrome 使用 POST Man插件,但未成功。我还尝试了其他方法。

  2. 我尝试将新学生添加到该站点,但没有成功。

谁能指导我使上述工作正常进行?

更新:

我尝试添加类型为article的新节点。工作正常。但是,当我尝试添加Department CCK类型的节点时,它显示“ s:22:” CSRF验证失败“; ”这是截屏

我已经通过链接https://drupal.org/node/2013781

我遵循会话= session_name = session_id,但仍然出现错误。
在此处输入图片说明 在此处输入图片说明 在此处输入图片说明


当您尝试发布节点时会发生什么?您是否收到错误消息?如果是这样,那是什么?
Gaelan

Answers:


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

    在此处输入图片说明

  • 如果它是有效用户,则它将返回带有会话ID和Name的用户详细信息。如果无效,它将返回拒绝访问

    在此处输入图片说明

  • 通过在POST HEADER中使用会话名称和ID,我们可以创建新节点

    在此处输入图片说明

  • 现在,在添加HEADER之后,您需要发出HTTP POST请求,并确保用户应具有创建节点的权限。

    在此处输入图片说明

  • 如果创建了节点,您将获得带有节点链接的响应

    在此处输入图片说明

注意:如果要使用JSON响应,则应始终在URL末尾附加.json。例如,http://XXXXXXXX.com/test/endpoint/user.jsonhttp://XXXXXXXX.com/test/endpoint/node.jsonhttp://XXXXXXXX.com/test/endpoint/user/user_id以.jsonhttp://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

是的,它有效。但是唯一的问题是,Article CCK具有title,field_names,body,但仅保存了标题并创建了node,但是body和name字段为空。如何克服这一点。
Ramaraju.d

7

对于Drupal 7和Services 7.x-3.x

步骤1:user.login使用您的用户名和密码向资源发出发布请求。

如果登录成功,您将获得具有4个属性的响应对象:

  • session_name
  • s
  • 代币
  • 用户(对象)

Google Chrome邮递员的屏幕截图 Google Chrome邮递员的屏幕截图

第2步:node具有2个标头的发布请求

  • Cookie:[session_name] = [sessid]
  • X-CSRF令牌:[令牌]

Google Chrome邮递员的屏幕截图 Google Chrome邮递员的屏幕截图


我尝试使用用户<endpoint> /user.login,但没有响应prntscr.com/gru4y6-不知道我在做什么错。
Patoshiパトシ

0

如果对REST API执行POST,则必须将所有内容都放入POST数据中,而不是URL中。在Postman中,您可以设置要发布的请求,然后在和下方键入您可以添加数据值的信息。不要忘记添加状态,uid,语言,类型,标题以及其他值。资源网址应仅为。x-www-form-urlencodedHOST/REST_API_PATH/node


1
有点混乱。好的,您能告诉我创建新文章的参数是什么。如果您不介意,可以发表一个例子或链接,以便我有一个清晰的概念!
Ramaraju.d
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.