Ruby HTTP 获取参数

2024-01-01

如何通过 ruby​​ 发送带参数的 HTTP GET 请求?

我尝试了很多例子,但都失败了。


我知道这篇文章已经很旧了,但是为了那些由 google 带到这里的人,有一种更简单的方法可以以 URL 安全的方式对参数进行编码。我不知道为什么我没有在其他地方看到这个方法,因为该方法记录在 Net::HTTP 页面上。我也看到 Arsen7 描述的方法作为其他几个问题的公认答案。

中提到的网络::HTTP http://www.ruby-doc.org/stdlib-1.9.3/libdoc/net/http/rdoc/Net/HTTP.html文档是URI.encode_www_form(params):

# Lets say we have a path and params that look like this:
path = "/search"
params = {q: => "answer"}

# Example 1: Replacing the #path_with_params method from Arsen7
def path_with_params(path, params)
   encoded_params = URI.encode_www_form(params)
   [path, encoded_params].join("?")
end

# Example 2: A shortcut for the entire example by Arsen7
uri = URI.parse("http://localhost.com" + path)
uri.query = URI.encode_www_form(params)
response = Net::HTTP.get_response(uri)

您选择哪个示例很大程度上取决于您的用例。在我当前的项目中,我使用的方法类似于 Arsen7 推荐的方法以及更简单的方法#path_with_params方法并且没有块格式。

# Simplified example implementation without response
# decoding or error handling.

require "net/http"
require "uri"

class Connection
  VERB_MAP = {
    :get    => Net::HTTP::Get,
    :post   => Net::HTTP::Post,
    :put    => Net::HTTP::Put,
    :delete => Net::HTTP::Delete
  }

  API_ENDPOINT = "http://dev.random.com"

  attr_reader :http

  def initialize(endpoint = API_ENDPOINT)
    uri = URI.parse(endpoint)
    @http = Net::HTTP.new(uri.host, uri.port)
  end

  def request(method, path, params)
    case method
    when :get
      full_path = path_with_params(path, params)
      request = VERB_MAP[method].new(full_path)
    else
      request = VERB_MAP[method].new(path)
      request.set_form_data(params)
    end

    http.request(request)
  end

  private

  def path_with_params(path, params)
    encoded_params = URI.encode_www_form(params)
    [path, encoded_params].join("?")
  end

end

con = Connection.new
con.request(:post, "/account", {:email => "[email protected] /cdn-cgi/l/email-protection"})
=> #<Net::HTTPCreated 201 Created readbody=true> 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby HTTP 获取参数 的相关文章

随机推荐

  • Angular 4 延迟加载命名路由器出口不起作用

    我有一个延迟加载的问题 不打算路由到指定的路由器出口 有人可以看看我错在哪里吗 我有一个主页 其中有一个指向 产品 gt 默认路由器出口 和 产品详细信息 gt 命名路由器出口 的链接 div div a Product a div div
  • React 仅在加载时调用一次方法

    我是 Hooks 新手 遇到过一些让我陷入困境的情况 希望有人可以解释或提供对我有意义的解决方案 在组件安装时仅加载一次方法会令人困惑 我尝试了这个方法 有效 但是不明白 谁可以给我解释一下这个 const useMountEffect f
  • POST JSON 失败,并显示 415 不支持的媒体类型,Spring 3 mvc

    我正在尝试向 servlet 发送 POST 请求 请求通过 jQuery 发送 如下所示 var productCategory new Object productCategory idProductCategory 1 product
  • 在 Javascript ECMAScript 6 中从类名创建对象

    我想使用 ES6 创建对象工厂 但旧式语法不适用于新语法 我有下一个代码 export class Column export class Sequence export class Checkbox export class Column
  • 3分钟了解什么是反射?

    许多 Net 面试问题列表 包括好的人 http www hanselman com blog WhatGreatNETDevelopersOughtToKnowMoreNETInterviewQuestions aspx 包含问题 什么是
  • java中的encode(, 'escape') PostgreSQL等效项是什么?

    我有一个 bytea 列存储在 Postgresql 数据库中 列名 测试 Ex x61736461640061736461736400 当我在选择查询中使用encode test escape 时 我得到这样的结果 Ex asdad 00
  • 使用字段重写无参数方法时出现空指针异常

    我正在研究 Scala 中的编程 它说您可以使用字段覆盖无参数方法 广告给出了以下示例 abstract class Element def contents Array String val height Int contents len
  • 使用正则表达式

    这个正则表达式有什么问题 我需要它使 name 仅包含字母数字 现在看来根本不起作用了 if preg match A Za z0 9 name e name must contain only letters or numbers 您需要
  • iPhone-SDK 的最佳 SQLite 3 教程在哪里? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何让我的应用程序使用 Windows 主题?

    我正在使用一些 Windows API 来创建一个小应用程序 我已经创建了按钮 窗口 好吧 但问题是我创建的组件看起来不像操作系统主题 它们看起来很简单 请参阅按钮作为示例 如何启用 Windows 主题 它可以是 C 语言或 Delphi
  • Sprite-Kit 在触摸屏幕时更改节点的图像

    有一个通过点击屏幕来控制的英雄 我希望每次触摸屏幕时英雄看起来都有点不同 我所做的是设置两个略有不同的图像 我希望在发生触摸事件时改变英雄的形象 到目前为止 我设置了一个数组来保存信息 但它有点行不通 NSMutableArray hero
  • 我们可以在 c++ 中使用 POSIX C 库吗?

    我是 Linux 系统编程领域的新手 我目前使用 C 编程 想切换到 C 我们可以在 c 中使用 POSIX C 库中定义的所有函数而不进行任何更改吗 原则您应该能够使用 C 中的任何 C API 该语言包含有利于它的功能 大多数 C 库作
  • 修改R中x轴上的日期格式?

    我想更改 R 中月份年份的绘图格式 所以目前它也显示日期 我只想显示月份年份 With my data http uploadeasy net upload 6nhi rar和 R 代码 plot alvdate 1250 1600 c N
  • .(data_type) 方法到底调用/做什么?

    我遇到了一段使用过的代码 string 方法 不知道这叫什么 我很难找到它 这是我尝试理解的 package main import fmt import reflect func main var b interface b silly
  • html5 视频的 timeupdate 事件多久触发一次

    学习html5的东西 太棒了 想知道 timeupdate 事件触发的频率 旁注 js 视频 API 有很多有趣的可能性 例如 可以使用 ctrl F 来搜索视频 运行语音识别作为视频处理的一部分 然后创建一个长键值存储 其中时间戳作为键
  • 请说明为什么在字符串的情况下,字符串对象的两个引用是相同的(代码写在下面)

    using System using System Collections using System Configuration using System Data using System Linq using System Web us
  • Python 中的多元求根

    使用 Excel 求解器 很容易找到该方程的解 x 和 y 的最佳值 x 14 80461 y 4 9233 10 0 4803 0 但是 我不知道如何在 Python 中执行此操作 现有的 scipy 优化库函数 如 fsolve 或 l
  • 为什么相互让步使 ArrowApply 和 Monads 等效,而不像 Arrow 和 Applicative?

    这是我要参考的SO帖子 https stackoverflow com a 24668518 11143763 另外 我将使用与该问题中的OP相同的片段 以免分离材料 https stackoverflow com q 24668313 1
  • gitignore 跨所有分支?

    嘿 我正在尝试进入 git 作为 emacs 用户 首先要做的就是确保 git 忽略 和 文件 文档讨论了我一直在使用的 gitignore 然而 仍然有几个问题 gitignore 现已签入并部分 的一个分支 gitignore 应该是
  • Ruby HTTP 获取参数

    如何通过 ruby 发送带参数的 HTTP GET 请求 我尝试了很多例子 但都失败了 我知道这篇文章已经很旧了 但是为了那些由 google 带到这里的人 有一种更简单的方法可以以 URL 安全的方式对参数进行编码 我不知道为什么我没有在