【问题标题】:How to sign a GET request containing a query parameter with a space如何签署包含带有空格的查询参数的 GET 请求
【发布时间】:2020-05-11 14:08:32
【问题描述】:

想要使用Twitter search API,我的所有测试都可以,除了那些在我的搜索查询中包含空格的测试。

例如:使用 @RedouaneBali has:mentions 查询的搜索会构建以下请求:

Request{method=GET, url=https://api.twitter.com/1.1/tweets/search/30day/dev.json?fromDate=201912261403&toDate=202001251248&maxResults=100&query=%40RedouaneBali%20has%3Amentions, tags={}}

{"error":{"message":"Could not authenticate you."}}结束

所以我得出结论,由于空间的原因,签名部分是 KO(我的查询中没有任何空间,一切运行良好)。我试图用%20+ 替换它,但它也不起作用。我正在使用这个Oauth1SigningInterceptor class 来签署我的请求。

在里面调试,我看到我的查询参数首先从@RedouaneBali has:mentions转换为%40RedouaneBali+has%3Amentions,然后转换为%2540RedouaneBali%2Bhas%253Amentions,所以它可能来自这里,但我不太清楚。有这个双重签名正常吗?

知道如何将其转换为%20 而不是+%2B

Twitter Doc

【问题讨论】:

    标签: java http twitter request sign


    【解决方案1】:

    这是一个 ESCAPER 问题, UrlEscapers.urlPathSegmentEscaper() 转换 %20 中的空格,而 UrlEscapers.urlFormParameterEscaper() 转换 + 中的空格。 双重转换显然通常基于 twitter 文档。 见固定文件here

    【讨论】:

      猜你喜欢
      • 2020-02-05
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多