java - 如何使用空格对包含查询参数的 GET 请求进行签名

标签 java http twitter request sign

想要消费 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 吗?

Twitter Doc

最佳答案

这是一个逃生问题, UrlEscapers.urlPathSegmentEscaper() 转换 %20 中的空格,而 UrlEscapers.urlFormParameterEscaper() 转换 + 中的空格。 双重转换显然通常基于 Twitter 文档。 查看修复文件here

关于java - 如何使用空格对包含查询参数的 GET 请求进行签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59910138/

相关文章:

http - 用于服务器的正确用户代理是什么?

sql - 是否有可能在 YQL 中获得两个结果集的交集或差异?

python - 如何从 datetime.datetime 对象中提取小时和分钟?

java - 替换 Google Play 商店证书

Java '.class' 预期错误

java - Apache DefaultHttpClient (Android) 和 NSURLConnection (iOS) 是否会重试与旧协议(protocol)版本的失败连接?

java - 原因:java.lang.ExceptionInInitializerError原因:java.lang.RuntimeException

java - 从 POST 保存分割上传的文件最终会变成空

c++ - curl 发布空对象

java - 如何识别 Twitter4j RateLimitStatusEvent 包含哪个端点的限制