使用Java路标的Yelp V2 API-无效的\u签名
尝试从Java应用程序(Android)调用v2 api,利用 路标oauth图书馆。我已将代码提取到一个独立的 可以从命令行运行的版本(不依赖于 Android)。请看一看,让我知道我做错了什么 您可以通过键入:java-jar YelpV2Test.jar直接运行该示例 我还包括了一个zip文件,它是源代码,并且是必需的 库,设置为Eclipse项目。我还在粘贴代码 就在下面 我试着从GET换到POST,结果一模一样 结果。使用v1api没有问题。解决这个问题有什么帮助吗 将不胜感激 --代码的开始-- --代码结束-- 我看到的测试结果如下: $java-jar YelpV2Test.jar RunMe>>签名查询: 运行时>>结果:{“错误”:{“文本”:“签名无效” 无效,“id”:“无效的签名”,“说明”:“无效的签名”。 预期的签名基字符串:GET&http%3A%2F%2Fapi.yelp.com %2Fv2%2搜索和分类过滤器%3Dbanks%26限制%3D15%26ll %3D30.361471%252C-87.164326%26oauth\u用户密钥 %3dpbsjw9p08到当前的%26oauth %3D483128657125973388%26oauth_签名法%3DHMAC- SHA1%26oauth_时间戳%3D1296021631%26oauth_令牌 %3DARfbDucxkBi89lBHARTgygLkcMw9h8eW%26oauth_版本%3D1.0%26offset使用Java路标的Yelp V2 API-无效的\u签名,java,web-services,oauth,signpost,Java,Web Services,Oauth,Signpost,尝试从Java应用程序(Android)调用v2 api,利用 路标oauth图书馆。我已将代码提取到一个独立的 可以从命令行运行的版本(不依赖于 Android)。请看一看,让我知道我做错了什么 您可以通过键入:java-jar YelpV2Test.jar直接运行该示例 我还包括了一个zip文件,它是源代码,并且是必需的 库,设置为Eclipse项目。我还在粘贴代码 就在下面 我试着从GET换到POST,结果一模一样 结果。使用v1api没有问题。解决这个问题有什么帮助吗 将不胜感激 --
%3D0%26radius_filter%3D10%26sort%3D0“}你找到解决方案了吗?????我最后使用了另一个库。在Android上使用路标时出现了一些bug。现在可能已经修好了,我不确定。你用的是什么库?我用的是scribe oauth java库。见:
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URLEncoder;
import oauth.signpost.OAuthConsumer;
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
import oauth.signpost.exception.OAuthCommunicationException;
import oauth.signpost.exception.OAuthExpectationFailedException;
import oauth.signpost.exception.OAuthMessageSignerException;
import oauth.signpost.signature.HmacSha1MessageSigner;
import oauth.signpost.signature.QueryStringSigningStrategy;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
public class RunMe {
public final String CONSUMER_KEY = "PbSjw9p08To_HZnFYqpRZg";
public final String CONSUMER_SECRET = "_raqYwj6njZ15sXj4z-CYEDHiHQ";
public final String TOKEN = "ARfbDucxkBi89lBHARTgygLkcMw9h8eW";
public final String TOKEN_SECRET = "rzvmIKVC4WQsdZV1lM5naZ5IQ8g";
public final String YWSID = "iXUUomsyqBkdXaypz7539A";
public final String ENCODING_SCHEME = "UTF-8";
public void start() {
String lat = "30.361471";
String lng = "-87.164326";
String category = "banks";
String radius = "10";
String limit = "15";
String offset = "0";
String sort = "0";
String service = "http://api.yelp.com/v2/search";
try {
String query = String
.format(service
+ "?ll=%s&category_filter=%s&radius_filter=%s&limit=%s&offset=
%s&sort=%s",
URLEncoder.encode(lat + "," + lng, ENCODING_SCHEME),
URLEncoder.encode(category, ENCODING_SCHEME),
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);
System.out.println(getClass().getName() + ">> " + "Signed query: "
+ signedQuery);
HttpGet request = new HttpGet(signedQuery);
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpClient.execute(request);
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity);
System.out.println(getClass().getName() + ">> " + "Result: "
+ result);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthMessageSignerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthExpectationFailedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthCommunicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new RunMe().start();
}
}