HTTP状态代码302

我正在使用Ruby中的Rails后端,我想将数据发布到此服务器。 但如果我用PAW做一个Post-request,我会被重定向。 我是Http Requests的新手。 有人可以解释我的function以及如何使用http post请求吗?

我想在我的服务器的datanase(sqlite3)上发布信息。

这是一个截图,应该解释一切: 我希望你需要的所有信息

这是如何运作的? 请解释:)谢谢。 问候约翰

这是代码:

OwnersController:

#app/controllers/owners_controller.rb class OwnersController < SessionsController respond_to :html before_action :owner_find, only: [:show, :edit, :update, :destroy] def index @owners = Owner.all end def show end def update @owner = Owner.find(params[:id]) if @owner.update(owner_params) redirect_to @owner else render 'edit' end end def new @owner = Owner.new end def destroy @owner.destroy redirect_to owners_path end def edit end def create @owner = Owner.new owner_params if @owner.save! flash[:notice] = 'You signed up successfully' flash[:color]= 'valid' redirect_to owners_path else flash[:notice] = 'Form is invalid' flash[:color]= 'invalid' render 'new' end end private def owner_find @owner = Owner.find(params[:id]) end def owner_params params.require(:owner).permit(:name, :password, :password_confirmation, :token) end end 

SessionController:

 class SessionsController  [:login, :login_attempt] def login #goes to Login Form end def logout session[:owner_id] = nil redirect_to :action => 'login' end def login_attempt authorized_user = Owner.authenticate_by_name(params[:login_name],params[:login_password]) if authorized_user session[:owner_id] = authorized_user.id flash[:notice] = "Wow Welcome again, you logged in as #{authorized_user.name}" redirect_to welcome_index_path else flash[:notice] = 'Invalid Username or Password' flash[:color]= 'invalid' render 'login' end end end 

控制台日志:

来自网络请求( http://192.168.2.144:3000/owners?name=hans&password=hans321&password_confirmation=hans321 )

在2015-10-01 12:12:18开始获取“/ owner?name = hans&password = [FILTERED]&password_confirmation = [FILTERED]”for 192.168.2.144 +0200无法从192.168.2.144渲染控制台! 允许的网络:127.0.0.1,:: 1,127.0.0.0/127.255.255.255由OwnersController处理#index为HTML参数:{“name”=>“hans”,“password”=>“[FILTERED]”,“password_confirmation “=>”[过滤]“}所有者加载(0.1ms)选择”所有者“。* FROM”所有者“WHERE”所有者“。”id“=? LIMIT 1 [[“id”,2]]所有者加载(0.1ms)选择“所有者”。* FROM“所有者”在布局/应用程序内呈现所有者/ index.html.erb(1.8ms)在60ms内完成200 OK(视图:58.9ms | ActiveRecord:0.2ms)

它告诉200确定但数据库中没有任何反应。

从Paw-Request(所以我可以使用post。顺便说一句。如何在浏览器请求中使用post?

在2015-10-01 12:12:45开始POST“/ owner?name = hans&password = [FILTERED]&password_confirmation = [FILTERED]”for 192.168.2.144 +0200无法从192.168.2.144渲染控制台! 允许的网络:127.0.0.1,:: 1,127.0.0.0/127.255.255.255由OwnersController处理#create as HTML参数:{“name”=>“hans”,“password”=>“[FILTERED]”,“password_confirmation “=>”[FILTERED]“}无法validationCSRF令牌真实性重定向到http://192.168.2.144:3000/filter链暂停为:authenticate_user呈现或重定向完成302在1ms内找到(ActiveRecord:0.0ms)

似乎CRSF认证失败了..


编辑:

起初:对Rich Peck! 这对我帮助很大。 谢谢!! 我非常感谢你的努力。

我接近解决方案..我的问题是:我不能把正确的参数放在url中。 令牌身份validation已禁用以进行测试。 所以它不重要。

params应该是这样的:参数:{“utf8”=>“✓”,“authenticity_token”=>“q9JvFhoSUgfydFTvh18JHbIIdKNDjnOS9m / trVBu9EHPP04xGsO69zPh1BFZBI1Ev1YcnOTiPmaAiPWOSkm5Xg ==”,“owner”=> {“name”=>“Hubert”,“password”= >“[FILTERED]”,“password_confirmation”=>“[FILTERED]”},“commit”=>“创建所有者”}

而不是在我的请求中:参数:{“name”=>“Hubert”,“password”=>“[FILTERED]”,“password_confirmation”=>“[FILTERED]”,“owner”=> {}}

HTTP状态代码

首先, 30x响应意味着“资源移动” 。

许多搜索引擎优化人员使用301响应来表示资源的永久重新定位。 302并不常见,但仍然意味着类似的事情。

每次发送和接收HTTP请求时,您都将收到状态代码。 典型的是200响应 – 状态成功


你所看到的是redirect_to命令在行动 –

 if @owner.save! flash[:notice] = ... redirect_to owners_path 

我之前从未使用过PAW,但我认为它只是给你服务器的纯响应,在这种情况下是30x “资源移动”代码。

我希望一个典型的浏览器请求加载重定向的路由并在屏幕上显示其产量。


服务器

作为测试方法,您应该在浏览器中尝试相同的事务:

 lvh.me:3000/orders 

( lvh.me是一个路由到您自己的localhost的域,它有助于Rails中的子域)

这将使您能够测试并查看响应中发生的情况。 您*应该*发现您的数据已保存到数据库中(尽管在您的情况下是SQLite3)。


句法

最后,您需要确保在代码中使用正确的语法。

特别:

 #app/controllers/owners_controller.rb class OwnersController < ApplicationController ... def create @owner = Owner.new owner_params end private def owner_params params.require(:owner).permit(:name, :password, :password_confirmation) end end 

您还需要查看bcrypt-ruby来保护您的密码。


测试

我倾向于使用标准浏览器function测试我的Rails应用程序。

这意味着您可以运行Rails Server (控制台中的$ rails s ),然后您可以通过浏览器访问它。

你试图使用这个PAW的东西,这是好的,但是在应用程序的用户交互性方面没有给你很大的灵活性(例如,提交真实的表单等)......

在此处输入图像描述

在此处输入图像描述

在你的情况下,我会做以下事情:

 #app/views/orders/new.html.erb <%= form_for @order do |f| %> <%= f.text_field :name %> <%= f.password_field :password %> <%= f.password_field :password_confirmation %> <%= f.submit %> <% end %> 

然后,您将访问lvh.me:3000/orders/new并提交表单。 这将告诉你它是如何响应的!


HTTP

好的,这是处理HTTP请求...

在此处输入图像描述

每当您向Web应用程序发送一段事务数据时,都可以通过HTTP请求执行此操作。 HTTP请求只是通过“Internet”发送数据的一种方式。

使用基于Rails的应用程序,这意味着每次在应用程序中“执行”操作时,您实际上都是向Web服务器发送HTTP请求。 Rails解释此请求并发送响应 。 这个回答是你的问题所在。

您要求接收302响应 - 这是Web服务器说您已被重定向的方式。 说实话,这是非常基本的东西; 您的浏览器处理大部分内容。

这里有一个很棒的教程:

在此处输入图像描述


好吧那你的错误如下:

无法validationCSRF令牌的真实性

我稍后可以详细说明,但是现在,您可能希望查找此解决方案: 警告:在API开发的情况下无法validationCSRF令牌的真实性