Tag: http

如何为Rails和GWT模拟PUT / DELETE?

我想使我的应用程序有点REST兼容。 我在后端使用Rails,在前端使用GWT 。 我想做更新和删除。 我意识到我可以做一些像mydomain.com/:id/delete(GET)这样的事情并完成同样的事情。 但是,正如我之前所说,我希望有一个REST兼容的后端。 因此,我想做mydomain.com/:id(DELETE)并让它隐式调用我的删除方法。 现在,我的理解是,如果浏览器(我的浏览器是GWT RequestBuilder)不支持DELETE / GET,Rails会以某种方式使用POST和其他一些url参数完成此任务。 那么,我如何通过GWT RequestBuilder实现这一目标?

validationShopify webhook

我认为要让Shopify webhook与Rails应用程序集成,Rails应用程序需要禁用默认的verify_authenticity_token方法 ,并使用X_SHOPIFY_HMAC_SHA256标头实现自己的身份validation。 Shopify文档说只使用request.body.read 。 所以,我做到了: def create verify_webhook(request) # Send back a 200 OK response head :ok end def verify_webhook(request) header_hmac = request.headers[“HTTP_X_SHOPIFY_HMAC_SHA256”] digest = OpenSSL::Digest.new(“sha256”) request.body.rewind calculated_hmac = Base64.encode64(OpenSSL::HMAC.digest(digest, SHARED_SECRET, request.body.read)).strip puts “header hmac: #{header_hmac}” puts “calculated hmac: #{calculated_hmac}” puts “Verified:#{ActiveSupport::SecurityUtils.secure_compare(calculated_hmac, header_hmac)}” end Shopify webhook指向正确的URL,路由将其提供给上面显示的控制器方法。 但是当我发送测试通知时,输出不正确。 两个HMAC不相等,因此未经validation。 我很确定问题是Shopify使用整个请求作为身份validation哈希,而不仅仅是POST内容。 所以,我需要原始的,未触及的HTTP请求,除非我弄错了。 在至少一个小时的搜索之后, 这个问题似乎是互联网上唯一有希望的事情。 这正是我所要求的,它有30个upvotes接受的答案。 但他的回答……很荒谬。 […]

Rails Put vs Post

我一直在阅读put和post请求之间的区别,我有一些与rails相关的问题:我想更改已经创建的行中的一个特定字段…我应该使用put还是post请求? 例如以下不同? #Assume this is a put request def update @model=Model.find(x) @model.field=”new_field” @model.save end #Assume this is a post request def update @model=Model.find(x) @model.field=”new_field” @model.save end #What if I use the rails update method? def update @model=Model.find(x) @model.update(model_params) @model.save end 提前致谢。

在Heroku环境中将POST请求视为GET

我有奇怪的情况。 我有一个RoR应用程序,它提供了我从Java应用程序连接的REST API。 我正在本地开发RoR,并在Heroku环境中部署它。 无论如何(我尝试从Java APP,Mozilla REST客户端等)我尝试发送应该由api控制器中的create action处理的POST HTTP请求。 在localhost上 – 一切都按预期工作。 在Heroku生产环境中 – POST请求被视为正常的GET。 以下是此资源的路线: api_v1_items GET /api/v1/items(.:format) api/v1/items#index {:format=>:json} POST /api/v1/items(.:format) api/v1/items#create {:format=>:json} api_v1_item GET /api/v1/items/:id(.:format) api/v1/items#show {:format=>:json} PATCH /api/v1/items/:id(.:format) api/v1/items#update {:format=>:json} PUT /api/v1/items/:id(.:format) api/v1/items#update {:format=>:json} DELETE /api/v1/items/:id(.:format) api/v1/items#destroy {:format=>:json} 所以我正在尝试对/api/v1/items传递所有必要参数的POST请求。 在localhost中,响应是正确的: Started POST “/api/v1/items?token=l4XOHrhDApPqTp1u4TxBjQ” for 127.0.0.1 at 2014-05-15 22:11:49 +0200 Processing by […]

在我的rails答案中删除不必要的HTTP标头

我目前正在开发一个大小很重要的API:我希望答案包含尽可能少的字节。 我优化了我的JSON答案,但rails仍然响应许多奇怪的标题 HTTP/1.1 200 OK Server: nginx/0.7.67 # Not from Rails, so ok. Date: Wed, 25 Apr 2012 20:17:21 GMT # Date does not matter. We use ETag Can I remove this? ETag: “678ff0c6074b9456832a710a3cab8e22” # Needed. Content-Type: application/json; charset=utf-8 # Also needed. Transfer-Encoding: chunked # The alternative would be Content-Length, so ok. Connection: keep-alive # […]

request.format return * / *

我目前正在为RoR上的应用程序开发API 作为一个例子,我创建了一些XML,加载了创建对象所需的所有信息,让我们说一个Person,并使用Curl我将它提交给我的应用程序 我能够从控制器中调用我想要的创建操作,并正确传递对象的哈希参数 但是现在我需要应用不同的行为,如果请求是否与XML有关,困扰我的是为什么在控制器request.format给出*/* 。 有什么线索吗? curl -v -H “Content-Type: application/xml; charset=utf-8” –data-ascii @client.xml http://foo.com:3000/clients?api_key=xxx def create logger.debug request.format # produces “*/*” if request.format.xml? # never gets here end end

在Rails 3中使用Cucumber / Capybara,如何设置自定义User-Agent字符串?

在我的Rails 3应用程序中,我有不同的iPhone与桌面浏览器的布局。 我正在尝试使用Cucumber / Capybara测试iPhone布局。 到目前为止,我在请求的HTTP标头中设置iPhone User-Agent字符串的所有尝试都失败了。 我已经使用Cucumber和Capybara教程跟踪了测试自定义头文件和ssl,但它似乎没有在HTTP请求中设置User-Agent字符串。 如果我只是使用我的iPhone浏览我的Rails应用程序,我会得到正确的布局。 我正在使用Rack-Mobile-Detect将Rails request.format设置为:iphone。 关于如何使这项工作的任何想法? 我准备放弃Capybara并回到Webrat。 这是我到目前为止所拥有的: Feature: Detect Browser In order to have different layouts for iPhone vs. desktop browsers As a developer I want to show different layouts for different browsers Scenario: Show home page with desktop layout Given I am using “a desktop browser” When […]

URL重定向和1and1

我已经在Heroku上运行了一个应用程序。 我从1and1购买了一个顶级.com域名(我在那里有其他网站,所以我认为这会让生活更轻松)。 当我尝试重定向到我的Heroku应用程序时,我不允许修改CName别名记录,就像我为其他站点所做的那样 – 这些都是子域名。 我有两个选择:帧重定向或HTTP重定向,我试过两个。 帧重定向似乎根本不起作用 – 页面保持空白。 HTTP重定向确实会到达我的heroku站点,但是当它显示时,地址栏显示myproject.herokuapp.com而不是mydomain.com 。 我已将www.mydomain.com和mydomain.com添加到我的heroku域名中。 无论如何要添加面具或类似物?

使用密钥HTTP_AUTHORIZATION而不是Authorization访问Ruby on Rails中的授权标头?

我希望有人可以为我清理一些东西。 我正在使用Rails 2.3.5,我可以在控制器动作中访问请求标头,如下所示: def index if request.headers[‘…’] == ‘…’ … end end 或类似的东西。 request.headers是ActionController :: Http :: Headers的一个实例,它看起来像是一个Hash。 因此,我希望标题键在我发送的名称上。 但是,如果我发送请求,请使用Authorization标头,如下所示: curl -H ‘Authorization: OAuth realm=”MyRealm”,…’ http://app/path 操作中的以下代码返回false: if request.headers.include?(‘Authorization’) … 以下回应我在标题中发送的值: render :text => request.headers[‘Authorization’] 以下检查返回true,有趣的是: if request.headers.include?(‘HTTP_AUTHORIZATION’) … 同样,以下内容回显了我在标题中发送的值: render :text => request.headers[‘HTTP_AUTHORIZATION’] 似乎有一些我不知道的神奇事件。 我完全混淆为什么检查密钥’授权’失败,但渲染request.headers [‘Authorization’]的值成功。 我也很困惑’HTTP_AUTHORIZATION’来自何处,因为这不是我随请求发送的标头的名称。 有谁知道究竟发生了什么?

API的URL设计

我正在为我们的后端工作私人api。 我有一些有关联的集合。 每个集合都可以请求,分页,您也可以请求关联并分页这些关联。 我们不确定要使用哪种url设计…我们正在考虑: /users.json?per_page=10&association=parts,auditions&parts_per_page=5&auditions_per_page=5 /users.json?per_page=10&association[]=parts&association[]=auditions&parts_per_page=5&auditions_per_page=10 /users.json?per_page=10&association[auditions]=true&association[parts][per_page]=5 你怎么看 ? 你会选择哪一个? 为什么? 其中一个看起来不像有效的url方案? 谢谢 !