gpt4 book ai didi

java - 来自 Android 的 Yelp v2 API 使用 SignPost oauth libs 说签名无效

转载 作者:太空狗 更新时间:2023-10-29 13:41:51 24 4
gpt4 key购买 nike

尝试使用路标 oauth 库从 android 客户端调用。我生成了新的 APIv2 key ,但似乎没有什么不同。我得到的错误看起来像:

{"error":{"text":"Signature was 
invalid","id":"INVALID_SIGNATURE","description":"Invalid signature.
Expected signature base string: GET&http%3A%2F%2Fapi.yelp.com
%2Fv2%2Fsearch&category_filter%3Drestaurants%2520food%26limit%3D10%26ll
%3D37.422005%252C-122.084095%26oauth_consumer_key
%3DPbSjw9p08To_XXXXXXXXZg%26oauth_nonce
%3D-81097XXXXXXXX560239%26oauth_signature_method%3DHMAC-
SHA1%26oauth_timestamp%3D129XXXX091%26oauth_token
%3DARfbDXXXXXXXXlBHARTgygLkcMw9h8eW%26oauth_version%3D1.0%26offset
%3D0%26radius_filter%3D300%26sort%3D0"}}

我仔细检查过,我所有的 token 和 secret 值都完全匹配管理 API 屏幕中有什么。代码目前看起来像这样:

if (location != null) { 
String lat = Double.toString(location.getLatitude());
String lng = Double.toString(location.getLongitude());
String category = "restaurants+food";
String radius = "300";
String limit = "10";
String offset = "0";
String sort = "0";
try {
String query = String.format("http://api.yelp.com/v2/search?ll=%s,
%s&category_filter=%s&radius_filter=%s&limit=%s&offset=%s&sort=%s",
URLEncoder.encode(lat, ENCODING_SCHEME),
URLEncoder.encode(lng, ENCODING_SCHEME),
category,
URLEncoder.encode(radius, ENCODING_SCHEME),
URLEncoder.encode(limit, ENCODING_SCHEME),
URLEncoder.encode(offset, ENCODING_SCHEME),
URLEncoder.encode(sort, ENCODING_SCHEME));
OAuthConsumer consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY,
CONSUMER_SECRET);
consumer.setTokenWithSecret(TOKEN, TOKEN_SECRET);
consumer.setMessageSigner(new HmacSha1MessageSigner());
consumer.setSendEmptyTokens(true);
consumer.setSigningStrategy(new QueryStringSigningStrategy());
String signedQuery = consumer.sign(query);
Log.i(getClass().getName(), signedQuery);
HttpGet request = new HttpGet(signedQuery);
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpClient.execute(request);
HttpEntity entity = response.getEntity();
String jsonResult = EntityUtils.toString(entity);
Log.i(getClass().getName(), jsonResult);

最佳答案

刚发现问题。您应该在设置 TokenSecret 之前添加 MessageSigner,否则它为空并且所有内容都会被严重签名

关于java - 来自 Android 的 Yelp v2 API 使用 SignPost oauth libs 说签名无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4742321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com