如何使用 space 签署包含查询参数的 GET 请求
How to sign a GET request containing a query parameter with a space
想要使用 Twitter search API,我的所有测试都正常,除了在我的搜索查询中包含 space 的测试。
例如:使用 @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,因为 space(我的查询中没有任何 space,一切正常)。我试图用 %20
或 +
替换它,但它都不起作用。我正在使用这个 Oauth1SigningInterceptor class 来签署我的请求。
在内部调试,我看到我的查询参数首先从 @RedouaneBali has:mentions
转换为 %40RedouaneBali+has%3Amentions
然后转换为 %2540RedouaneBali%2Bhas%253Amentions
所以它可能来自这里但不太清楚大部头书。有这个双重签名是正常的吗?
知道如何将其转换为 %20
而不是 +
或 %2B
吗?
这是一个 ESCAPER 问题,
UrlEscapers.urlPathSegmentEscaper()
在 %20
中转换 space 而
UrlEscapers.urlFormParameterEscaper()
在 +
中转换 space。
双重转换显然通常基于推特文档。
查看修复文件here
想要使用 Twitter search API,我的所有测试都正常,除了在我的搜索查询中包含 space 的测试。
例如:使用 @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,因为 space(我的查询中没有任何 space,一切正常)。我试图用 %20
或 +
替换它,但它都不起作用。我正在使用这个 Oauth1SigningInterceptor class 来签署我的请求。
在内部调试,我看到我的查询参数首先从 @RedouaneBali has:mentions
转换为 %40RedouaneBali+has%3Amentions
然后转换为 %2540RedouaneBali%2Bhas%253Amentions
所以它可能来自这里但不太清楚大部头书。有这个双重签名是正常的吗?
知道如何将其转换为 %20
而不是 +
或 %2B
吗?
这是一个 ESCAPER 问题,
UrlEscapers.urlPathSegmentEscaper()
在 %20
中转换 space 而
UrlEscapers.urlFormParameterEscaper()
在 +
中转换 space。
双重转换显然通常基于推特文档。
查看修复文件here