想要消费 Twitter search API ,除了搜索查询中包含空格的测试之外,我的所有测试都正常。
例如:使用 @RedouaneBali has:mentions
查询进行搜索会构建以下请求:
请求{method=GET,url=https://api.twitter.com/1.1/tweets/search/30day/dev.json?fromDate=201912261403&toDate=202001251248&maxResults=100&query=%40RedouaneBali%20has%3Amentions , 标签={}}
并以此结束{"error":{"message":"无法验证您的身份。"}}
所以我得出的结论是,由于空格,签名部分被 KO(我的查询中没有任何空格,一切都运行良好)。我尝试用 %20
或 +
替换它,但它也不起作用。我正在使用这个Oauth1SigningInterceptor class签署我的请求。
在内部调试,我看到我的查询参数首先从 @RedouaneBali has:mentions
转换为 %40RedouaneBali+has%3Amentions
,然后转换为 % 2540RedouaneBali%2Bhas%253Amentions
所以它可能来自这里,但我不太清楚。有这个双重签名正常吗?
知道如何将其转换为 %20
而不是 +
或 %2B
吗?
最佳答案
这是一个逃生问题,
UrlEscapers.urlPathSegmentEscaper()
转换 %20
中的空格,而
UrlEscapers.urlFormParameterEscaper()
转换 +
中的空格。
双重转换显然通常基于 Twitter 文档。
查看修复文件here
关于java - 如何使用空格对包含查询参数的 GET 请求进行签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59910138/