Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 我可以使用curl或curb来发布到使用rails的表单吗';跨站点请求伪造保护?_Ruby On Rails_Ruby_Curb - Fatal编程技术网

Ruby on rails 我可以使用curl或curb来发布到使用rails的表单吗';跨站点请求伪造保护?

Ruby on rails 我可以使用curl或curb来发布到使用rails的表单吗';跨站点请求伪造保护?,ruby-on-rails,ruby,curb,Ruby On Rails,Ruby,Curb,我有一个简单的rails网页,用户在其中输入一些文本字段并上传图片。Rails然后存储图片并更新服务器上的数据库。它很好用 但是,我还需要另一台计算机上的脚本,以便偶尔使用curl/curb库更新网页。但是,当我尝试这样做时,会出现以下错误: ActionController::InvalidAuthenticationToken(ActionController::InvalidAuthenticationToken) 当我仔细观察时,rails似乎会在创建表单时放入一个名为“authenti

我有一个简单的rails网页,用户在其中输入一些文本字段并上传图片。Rails然后存储图片并更新服务器上的数据库。它很好用

但是,我还需要另一台计算机上的脚本,以便偶尔使用curl/curb库更新网页。但是,当我尝试这样做时,会出现以下错误:

ActionController::InvalidAuthenticationToken(ActionController::InvalidAuthenticationToken)

当我仔细观察时,rails似乎会在创建表单时放入一个名为“authenticity_token”的隐藏字段:


. . .

路缘脚本将无法工作,因为它没有“真实性”标记。这有什么办法吗?可能会制作另一个网页,做同样的事情,但只是为了我的抑制脚本?

隐藏的输入是为了防止。如果不先获取表单并提取隐藏的
authenticity\u令牌
参数,就无法发布到受保护的rails操作。curl不够聪明,无法独立完成这项工作

您有两个选择:

  • 通过从控制器中删除对
    protect\u from\u fackery
    的调用,关闭CSRF保护。坏主意
  • 运行一个请求来获取表单,使用一个快速且脏的正则表达式来获取参数,比如

    /name=“authenticity\u token”。*value=“([^”]+)”/

    然后运行另一个请求,为
    authenticity\u token
    发布该值。它很脆弱,可能会让人们讨厌你,但它会起作用

  • 使用比
    curl
    更复杂的方法对表单和后续提交进行必要的请求。这似乎是事实上的标准

  • 隐藏的输入是用来防止的。如果不先获取表单并提取隐藏的
    authenticity\u标记
    参数,就无法发布受保护的rails操作。curl本身不够聪明,无法做到这一点

    您有两个选择:

  • 通过从控制器中删除对
    protect\u from\u farmy
    的调用来关闭CSRF保护。这不是个好主意
  • 运行一个请求来获取表单,使用一个快速且脏的正则表达式来获取参数,比如

    /name=“authenticity\u token”。*value=“([^”]+)”/

    然后运行另一个请求,为
    真实性\u令牌发布该值。它很脆弱,可能会让人讨厌你,但它会起作用

  • 使用比
    curl
    更复杂的方法对表单和后续提交进行必要的请求。似乎是事实上的标准

  • 如何使用mechanize提交表格:

    Mechanize.new.get('url_with_form').forms[0].tap{|f| f.field = 'value'}.submit
    

    如何使用mechanize提交表格:

    Mechanize.new.get('url_with_form').forms[0].tap{|f| f.field = 'value'}.submit
    

    我不熟悉路缘,但如果这个东西可以做文章,我想它可以做得到。为什么不让它做一个get并拉出auth令牌然后做post呢?在你用regex解析这个响应之前,我一直同意。我不熟悉curb,但是如果这个东西可以做post,我想它可以做get。为什么不让它做一个get并拉出auth令牌,然后做post呢?在你用regex解析响应之前,我是同意的。你使用curl的事实让我猜你来自php背景。好消息是你再也不用使用curl了。实际上,我使用的是使用curl库的curb。我已经好几年没有编写PHP了。事实上,您使用的是curl,这让我猜测您来自PHP背景。好消息是你再也不用使用curl了。实际上,我使用的是使用curl库的curb。我已经好几年没有编写PHP了。