ruby 我如何检查HTTParty生成的完整URL?

jecbmhm3  于 2023-02-12  发布在  Ruby
关注(0)|答案(3)|浏览(132)

我想看看HTTParty gem根据我的参数构造的完整URL,无论是在提交之前还是之后,这都无关紧要。
我也很乐意从response对象中获取这个函数,但是我也找不到这样做的方法。

  • (背景)*

我正在使用HTTParty gem为一个API构建一个 Package 器。它可以广泛地工作,但是偶尔我会从远程站点得到一个意想不到的响应,我想深入研究为什么--是我发送错误的东西吗?如果是,是什么?我不知何故使请求格式错误了吗?查看原始URL对于故障排除是很好的,但是我看不出是怎么回事。
例如:

HTTParty.get('http://example.com/resource', query: { foo: 'bar' })

可能产生:

http://example.com/resource?foo=bar

但是我怎么才能检查这个呢?
有一次我是这么做的:

HTTParty.get('http://example.com/resource', query: { id_numbers: [1, 2, 3] }

但它不起作用。通过实验我能够产生这个工作:

HTTParty.get('http://example.com/resource', query: { id_numbers: [1, 2, 3].join(',') }

因此,很明显,HTTParty的默认查询字符串格式与API设计者的首选格式不一致。这很好,但要弄清楚到底需要什么是很困难的。

nbnkbykc

nbnkbykc1#

在示例中没有传递基URI,因此它无法工作。
更正后,您可以获得如下完整的URL:

res = HTTParty.get('http://example.com/resource', query: { foo: 'bar' })
res.request.last_uri.to_s
# => "http://example.com/resource?foo=bar"

使用类:

class Example
  include HTTParty
  base_uri 'example.com'

  def resource
    self.class.get("/resource", query: { foo: 'bar' })
  end
end

example = Example.new
res = example.resource
res.request.last_uri.to_s
# => "http://example.com/resource?foo=bar"
rxztt3cl

rxztt3cl2#

你可以看到所有的信息的请求HTTParty发送的第一个设置:

class Example
  include HTTParty
  debug_output STDOUT
end

然后,它会将请求信息(包括URL)打印到控制台。

2wnc66cl

2wnc66cl3#

正如这里所解释的,如果您需要在发出请求之前获取URL,您可以

HTTParty::Request.new(:get, '/my-resources/1', query: { thing: 3 }).uri.to_s

相关问题