drupal HTTP POST数据


7

如何将HTTP POST / GET数据发送到drupal?

例如:我有一个html表单:

<form action="mydrupalcite.com" method="get">
    <input type="text" name="title" />
</form>

我如何将title数据导入Drupal的答案模块?(或任何模块?)

我正在寻找执行此操作的drupal方法(我对Drupal以及它的实际工作方式还比较陌生)

它与服务模块有关系吗?


我不是真正在寻找创建表单,而是将数据发送到drupal(问题模块表单)中的表单
tom91136 2012年

好吧,我认为否则可以查看Clives的回复。
GoodSp33d 2012年

Answers:


6

Drupal的表单API具有内置的CSRF保护,因此无法从外部域提交表单。您可以考虑禁用CSRF(非常糟糕的主意),也可以根据您的建议使用“服务”模块。

服务模块和站点上的表单之间没有一对一的映射,而是模块实现了某些任务的资源,这些任务将从外部客户端使用。默认情况下,您将获得节点,用户,分类术语以及其他信息。因此,您可以(例如)添加新的节点/用户/术语,但是您可以通过在身份验证之后向服务器发送xml / json / etc请求,而不是通过提交表单来这样做。

获取数据的方式几乎相同。您可以使用“服务”来执行此操作,或者可以管理/不需要自己的身份验证,请参见indrock的答案以找到一种好的方法。

服务是非常可扩展的,因此即使Answers模块没有实现资源,添加来自答案(或任何其他)模块的API函数的自己的包裹也很容易。

对服务的文件很可能将是一个良好的开端。


6

首先,您需要在Drupal中创建一个页面(URL)以获取此参数。您可以通过hook_menu()在自定义模块中实现来实现。请参考此内容创建您的自定义模块

function MYMODULE_menu() {
  $items['get_details'] = array (
    'title' => '',
    'page callback' => 'MYMODULE_access_variables',
    'page arguments' => array(1),
    'access callback' => TRUE,  // this will be accessible to everyone
  );
  return $items;
}

function MYMODULE_access_variables() {
 // Here you get access to the POSTED variables using $_RESPONSE php superglobal
  echo "<pre>";
  print_r ($_RESPONSE['title']);  // will get you the value of the HTML input type having name='title'
  echo "</pre>"
}

这将在您的站点上创建一个页面,网址为url http://mydrupalsite.com/get_details

现在,从您的HTML像

<form action="mydrupalcite.com/get_details" method="post">
    <input type="text" name="title" /> <!-- Note that the value of the attribute 'name' will be used the capture the value which is posted -->
</form>

注意:根据@clive的回答,我建议您仅将其用于开发/教育目的。这可能会带来安全隐患。


1
print_r会将给定的参数打印到您的站点。如果您想让Drupal添加页面的其余部分(边栏,css等),请使用类似以下的内容:pastebin.com/TC1FfPY7
AyeshK 2012年

@AyeshK不错的建议!我只是打印了该值,只是为了表明可以在函数内部访问这些值:)
AjitS 2012年
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.