代码之家  ›  专栏  ›  技术社区  ›  Ed de Almeida

RubyonRails:如何为请求头创建带引号的字符串?

  •  0
  • Ed de Almeida  · 技术社区  · 6 年前

    我从头开始写一个Twitter客户端,其中一个必要条件是 使用twitter gems,所以我必须创建自己的请求。

    Twitter API文档显示 here 我必须有这样的授权头:

    Authorization:
    OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog",
    oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg",
    oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D",
    oauth_signature_method="HMAC-SHA1",
    oauth_timestamp="1318622958",
    oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb",
    oauth_version="1.0"
    

    如你所见,我一定有 oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog" 第二部分用引号括起来。我试过在

    ["oauth_consumer_key",%Q( Figaro.env.TWITTER_ACCESS_TOKEN )].join('=')
    

    假设%q返回一个带引号的字符串。但当我检查价值时,我得到的只是

    oauth_consumer_key=xvz1evFS4wEEPTGEFPHBog
    

    显然,这与要求的结果不同。

    我错过了什么?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Kruupös    6 年前

    1。我的解决方案:

    'oauth_consumer_key="#{Figaro.env.TWITTER_ACCESS_TOKEN}"'
    

    2。为什么:

    %Q() 基本上用双引号替换变量 "" 就像你写的一样 "Figaro.env.TWITTER_ACCESS_TOKEN"

    实际上,为了显示 内容 对于变量,必须使用 interpolation 而不是名称本身,使用 "#{var}" .

    您也可以使用 %Q 直接使用插值 %Q{var} (音符 {} 而不是 () )。

    你的问题在别处:与 join() 方法。它正在摆脱双引号。在这种情况下 ["var", var].join('=') ["var", %Q{var}].join('=') 结束做同样的事情,但更复杂。

    @阿耳特伊格纳蒂耶夫的解决方案应该有效 . 但是如果你需要更易读,你甚至不需要加入,imho,只有当你使用两个以上的变量时才有意义。

    例如,我将使用 'oauth_consumer_key="#{var}"' 将单引号和双引号混合使用,以确保不会导致混淆。

    如果你 需要使用 %q() join ,您仍然可以使用 ["oauth_consumer_key", %Q("#{Figaro.env.TWITTER_ACCESS_TOKEN})].join('=') .

    • 注意,因为 参加 可以使用单引号内插 %q 或双引号内插 %q 在不影响最终结果的情况下:

    例如

    ['oauth_consumer_key', %q("#{var}")].join('=') == ["oauth_consumer_key", %Q("#{var}")].join('=')
    
        2
  •  1
  •   Artem Ignatiev    6 年前

    %Q(x) 基本上与“x”相同。

    为了达到预期的结果,您必须手动将报价引入 %Q 表达式,如下所示: %Q("#{Figaro.env.TWITTER_ACCESS_TOKEN}")