标签: signpost

HttpURLConnection.getResponseCode()在第二次调用时返回-1

当我正在使用的库(路标1.1-SNAPSHOT)时,我似乎在Android 1.5上遇到了一个特殊的问题,它连续两次连接到远程服务器.第二个连接始终失败了HttpURLConnection.getResponseCode()-1

这是一个暴露问题的测试用例:

// BROKEN
public void testDefaultOAuthConsumerAndroidBug() throws Exception {
    for (int i = 0; i < 2; ++i) {
        final HttpURLConnection c = (HttpURLConnection) new URL("https://api.tripit.com/oauth/request_token").openConnection();
        final DefaultOAuthConsumer consumer = new DefaultOAuthConsumer(api_key, api_secret, SignatureMethod.HMAC_SHA1);
        consumer.sign(c);                             // This line...
        final InputStream is = c.getInputStream();
        while( is.read() >= 0 ) ;                     // ... in combination with this line causes responseCode -1 for i==1 when using api.tripit.com but not mail.google.com
        assertTrue(c.getResponseCode() > 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上,如果我签署请求然后使用整个输入流,则下一个请求将失败,结果代码为-1.如果我只是从输入流中读取一个字符,似乎不会发生故障.

请注意,任何网址都不会发生这种情况 - …

java android oauth httpurlconnection signpost

29
推荐指数
3
解决办法
5万
查看次数

使用OAuth-Signpost和Apache HttpComponents签署POST请求的正确方法是什么?

我目前正在使用OAuth-Signpost Java库来签署从客户端发送到实现OAuth身份验证的服务器的请求.在进行GET请求时(使用HttpURLConnection)一切正常:请求被签名,参数被包含,签名在目的地中匹配.但是,它似乎不适用于POST请求.我知道使用HttpURLConnection签名POST时可能出现的问题,因此我转移到Apache HttpComponents库以获取这些请求.我在以下示例中发送的参数是纯字符串和类似XML的字符串('rxml').我的代码如下:

public Response exampleMethod(String user, String sp, String ep, String rn, String rxml){

   //All these variables are proved to be correct (they work right in GET requests)
    String uri = "...";
    String consumerKey = "...";
    String consumerSecret = "...";
    String token = "...";
    String secret = "...";

  //create the parameters list
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("user", user));
    params.add(new BasicNameValuePair("sp", sp));
    params.add(new BasicNameValuePair("ep", ep));
    params.add(new BasicNameValuePair("rn", rn));
    params.add(new BasicNameValuePair("rxml", rxml));

   // create a consumer object and configure …
Run Code Online (Sandbox Code Playgroud)

java oauth http-post signpost apache-httpcomponents

12
推荐指数
1
解决办法
9197
查看次数

Android OAuth:retrieveAccessToken()上的异常

我正在为我的Android应用设置OAuth.为了测试它我执行了以下操作:在我的项目中添加了signpost-core-1.2.1.1.jar和signpost-commonshttp4-1.2.1.1.jar,添加了变量"CommonsHttpOAuthConsumer consumer"和"CommonsHttpOAuthProvider provider"并在执行时执行以下操作单击按钮:

consumer = new CommonsHttpOAuthConsumer("xxx", "yyy");
provider = new CommonsHttpOAuthProvider("https://api.twitter.com/oauth/request_token", 
                    "https://api.twitter.com/oauth/access_token", 
                    "https://api.twitter.com/oauth/authorize");

oauthUrl = provider.retrieveRequestToken(consumer, "myapp://twitterOauth");
persistOAuthData();
this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(oauthUrl)));
Run Code Online (Sandbox Code Playgroud)

persistOAuthData()执行以下操作:

protected void persistOAuthData()
{
    try
    {
        FileOutputStream providerFOS = this.openFileOutput("provider.dat", MODE_PRIVATE);
        ObjectOutputStream providerOOS = new ObjectOutputStream(providerFOS);
        providerOOS.writeObject(this.provider);
        providerOOS.close();

        FileOutputStream consumerFOS = this.openFileOutput("consumer.dat", MODE_PRIVATE);
        ObjectOutputStream consumerOOS = new ObjectOutputStream(consumerFOS);
        consumerOOS.writeObject(this.consumer);
        consumerOOS.close();
    }
    catch (Exception e) { }
}
Run Code Online (Sandbox Code Playgroud)

所以,消费者和供应商正在打开浏览器,如之前描述保存在这里.

在onResume()方法中,我加载提供者和消费者数据并执行以下操作:

    Uri uri = this.getIntent().getData();
    if (uri != null && uri.getScheme().equals("myapp") && uri.getHost().equals("twitterOauth"))
    {
        verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER); …
Run Code Online (Sandbox Code Playgroud)

twitter android oauth signpost

8
推荐指数
1
解决办法
8547
查看次数

Android Dev - 回调网址无效...(0_o)

我正在为我的研究开发一个Android应用程序,我正在使用OAuth(路标库)来访问来自Web服务的用户数据,这也是开发过程的一部分.我能够完成OAuth的常用步骤,并使用Uri(用于回调应用程序),并且可以进入我调用设备浏览器的步骤,选择验证我的应用程序,下一步是支持将浏览器重定向到应用程序....

相反,我得到一个错误,上面写着"你没有权限打开:

appSchema:// appName?authorizationSensitiveInfo ..."'后面的附件?' 是来自服务的oauth_token和oauth_verifier(我们可以假设所有步骤直到重定向"正确").

可能存在的问题在于该appSchema://appName部分.根据我的理解,这是重定向URL,告诉Uri使用手机的浏览器来定位我的应用程序并调用onResume()方法.来自哪里的值appSchema://appName(在清单中定义?如果是这样的话?).

为什么问题有权限?我必须为我的Uri设置权限才能访问我的应用吗?我迷路了...如果你需要代码片段来帮助我请回复,我没有包含任何代码,因为这更像是我错过的一个概念......我现在不在我的机器上但是我可以提供代码,如果这将使事情更容易理解.真的在这里打我的脑袋......

响应一个伟大的答案在这里我如何处理我的恢复

protected void onResume() {
    super.onResume();       
    Uri uri = this.getIntent().getData();
    if (uri != null && uri.toString().startsWith(CALLBACK_URL)) {
        Log.d("StepGreenM", uri.toString());
        String verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER);
        Log.d("StepGreenM", verifier);
        try {

            provider.retrieveAccessToken(consumer, verifier);
            TOKEN = consumer.getToken();
            REQUEST_SECRET = consumer.getTokenSecret();

            Log.d("StepGreenM", TOKEN);
            Log.d("StepGreenM", REQUEST_SECRET);

        } catch (OAuthMessageSignerException e) {
            e.printStackTrace();
        } catch (OAuthNotAuthorizedException e) {
            e.printStackTrace();
        } catch (OAuthExpectationFailedException e) {
            e.printStackTrace();
        } catch (OAuthCommunicationException e) {
            e.printStackTrace();
        }
    }

    uri = getIntent().getData(); …
Run Code Online (Sandbox Code Playgroud)

android oauth callback signpost android-manifest

6
推荐指数
1
解决办法
7426
查看次数

Android Tumblr oAuth混乱

我正在尝试在Android应用中实现Tumblr API.我真的被授权用户,以便他们可以做一些事情,比如发布和查看他们的仪表板.我并不真正理解oAuth,并且Tumblr API文档会跳过它.我不知道我是否应该提示用户提供他们的凭据,或者在我拥有这些凭据之后如何处理这些凭据,或者类似的东西.我将Signpost库添加到我的项目中,但从那以后我一直在摸不着头脑.任何熟悉Android上oAuth的人都会关心我吗?谢谢!

android oauth tumblr signpost

6
推荐指数
1
解决办法
2951
查看次数

我可以在 Objective-c 调用之前和之后设置路标吗?

我观看了Getting Started with Instruments ,其中显示了Signposts的用法。该示例是用Swift编写的,但我想在我的Objective-C项目中使用它们。

在这些示例中,路标开始和结束是在函数内部设置的,这意味着它们将被相应地触发。我的项目是一个插件,其结构不同,我只有一个被调用一次的“主”函数,然后我使用自定义类中的一系列方法来加载和解析不同类型的数据。因为它都是连续的......我可以只有一个os_log_tand并用+os_signpost_id_t一遍又一遍地重新利用它吗?或者这不安全,因为该方法可能会在触发后返回?或者如果他们这么快就接到多次电话,他们会不会发生冲突?os_signpost_interval_beginos_signpost_interval_endend

谢谢。

// Initialize
os_log_t log = os_log_create("com.example.plugin", OS_LOG_CATEGORY_POINTS_OF_INTEREST);
os_signpost_id_t spid = os_signpost_id_generate(log);

// Measurement 1 
os_signpost_interval_begin(log, spid, "testMethodA started");
[MyClass testMethodA:arg1 withOptions:arg2];
os_signpost_interval_end(log, spid, "testMethodA finished");

// Measurement 2
os_signpost_interval_begin(log, spid, "testMethodB started");
[MyClass testMethodB:arg1 withOptions:arg2];
os_signpost_interval_end(log, spid, "testMethodB finished");

[...]
Run Code Online (Sandbox Code Playgroud)

methods xcode logging objective-c signpost

6
推荐指数
1
解决办法
1234
查看次数

适用于Android的OAuth 1.0库(java)

我正在尝试从支持OAuth 1.0的站点访问用户数据而不进行回调.我正在使用路标库,但我无法检索访问令牌,因为我尝试连接的站点不需要用户指定验证码.要从路标获取访问令牌,我似乎需要提供某种类型的验证码.

我的问题:有没有办法绕过这一步并仍然获得访问令牌?

否则,我收到消息"授权失败(服务器回复401)".我已经设置/注册了我的客户.

我已经包含了我现有的代码以及有关我正在尝试连接的网站的更多详细信息(http://www.stepgreen.org - 您必须创建一个帐户才能查看以下信息):

身份验证:OAuth

StepGreens首选的身份验证方法是OAuth.有关OAuth的更多信息,请访问OAuth.net.我们目前支持没有回调的OAuth 1.0.

您需要一些其他信息来配置您选择的OAuth库:

请求请求令牌:/ oauth/request_token请求访问令牌:/ oauth/access_token授权URL:/ oauth/authorize要与客户端一起使用OAuth,请记住设置客户端.

public static void main(String[] args) throws Exception{

OAuthConsumer consumer = new DefaultOAuthConsumer( CONSUMER_KEY, CONSUMER_SECRET,    
                                                   SignatureMethod.HMAC_SHA1);

OAuthProvider provider = new DefaultOAuthProvider(consumer, REQUEST_TOKEN_URL, 
                                                  ACCESS_TOKEN_URL, AUTHORIZE_URL);

System.out.println("Fetching request token...");

String authUrl = provider.retrieveRequestToken(OAuth.OUT_OF_BAND);

System.out.println("Request token: " + consumer.getToken());
System.out.println("Token secret: " + consumer.getTokenSecret());

System.out.println("Now visit:\n" + authUrl + "\n... and grant this app authorization");
System.out.println("Enter the verification code and hit ENTER when you're done:");

BufferedReader br = new …
Run Code Online (Sandbox Code Playgroud)

android oauth signpost

5
推荐指数
0
解决办法
1879
查看次数

Android Tumblr Oauth-signpost 401

好的,所以,我正在为Android制作Tumblr客户端,我一直在尝试并且未能让OAuth工作一周左右.这是它的发展方向:

用户启动应用程序.主要活动的onCreate执行此操作:

settings = getSharedPreferences(PREFS_NAME, 0);
authToken=settings.getString("OauthToken", "none");
authTokenSecret=settings.getString("OauthSecret", "none");
if(authToken=="none" || authTokenSecret=="none"){
    Intent i = new Intent(getApplicationContext(),Authentication.class);
    startActivity(i);
}
Run Code Online (Sandbox Code Playgroud)

这将启动包含WebView的身份验证活动.该活动成功获取请求令牌,并将WebView发送到Tumblr登录屏幕.要求用户允许应用访问他们的数据,他们按下允许,我的WebViewClient捕获回调URL,并使用它执行此操作:

String[] token = helper.getVerifier(url);
            if (token != null) {
                try {
                    String accessToken[] = helper.getAccessToken(token[1]);
                    editor.putString("OauthToken", accessToken[0]);
                    editor.putString("OauthSecret", accessToken[1]);
                    editor.commit();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            finish();
Run Code Online (Sandbox Code Playgroud)

辅助类的getAccessToken和getVerifier看起来像这样:

public String[] getVerifier(String myUrl) {
    // extract the token if it exists
    Uri uri = Uri.parse(myUrl);
    if (uri == null) {
        return null;
    }

    String token = uri.getQueryParameter("oauth_token");
    String …
Run Code Online (Sandbox Code Playgroud)

android oauth tumblr signpost

5
推荐指数
1
解决办法
2168
查看次数

使用Twitter(OAuth)登录SignPost或Twitter4j?

我读了很多关于路标的内容,然后回到Twitter4J,当我没有必要使用OAuth时,我创建了我的Twitter应用程序.

我现在很困惑我是否应该使用路标或Twitter4J的OAuth身份验证方法.

我已经读过Twitter4J本身使用OAuth的路标,但仍然不确定我应该做出的选择.

请帮助.

非常感谢!

android oauth signpost twitter4j

4
推荐指数
2
解决办法
4784
查看次数

使用基于sign-post api的grails-oauth插件刷新Yahoo Oauth访问令牌

我正在使用grails oauth插件.这为我提供了access_token成功的雅虎.但问题是 - 这个令牌(来自雅虎)的有效期仅为1小时.之后我们需要刷新它.通过他们的文档,似乎他们有刷新它的过程(如果令牌过期).这个调用绕过了第三条腿(用户的手动接受过程).这是非常好的!

现在,如果我正在尝试使用方法oauthService.fetchAccessToken- 我想这是击中get_access_token网址的方法(在提供商方面).但我得到例外:

oauth.signpost.exception.OAuthNotAuthorizedException:授权失败(服务器回复401).如果使用者密钥不正确或签名不匹配,则会发生这种情况.at oauth.signpost.AbstractOAuthProvider.handleUnexpectedResponse(AbstractOAuthProvider.java:239)at oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:189)at oauth.signpost.AbstractOAuthProvider.retrieveAccessToken(AbstractOAuthProvider.java:99)at oauth.signpost.来自org.grails.plugins.oauth.OauthService $ fetchAccessToken.call(未知来源)的org.grails.plugins.oauth.OauthService.fetchAccessToken(OauthService.groovy:286)中的OAuthProvider $ retrieveAccessToken.call(未知来源)


我已经进一步调试了插件和路标代码.而且我认为我们应该研究路标(现在),插件可以在以后轻松修改.

为了您的信息,我使用signpost(jar - 1.2.1.1)与commonshttp4客户端

这是用于刷新accessToken的Yahoo文档页面的链接. http://developer.yahoo.com/oauth/guide/oauth-refreshaccesstoken.html

Yahoo需要oauth_session_handle在yahoo发送的请求中使用accessToken参数.路标确实提供了一种获取此方法的方法provider.getResponseParameters().

接下来是,我使用以下方法将这些参数放回到refreshToken请求中 - consumer.setAdditionalParameters(httpParams)

但它不起作用!以下是stacktrace的一部分.当我尝试获取refreshedAccessToken时

oauth.signpost.exception.OAuthNotAuthorizedException:授权失败(服务器回复401).如果使用者密钥不正确或签名不匹配,则会发生这种情况.at oauth.signpost.AbstractOAuthProvider.handleUnexpectedResponse(AbstractOAuthProvider.java:239)at oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:189)at oauth.signpost.AbstractOAuthProvider.retrieveAccessToken(AbstractOAuthProvider.java:99)

期待很快听到一些伟大/慷慨的家伙:-)

谢谢,萨利尔

java grails oauth signpost yahoo-api

4
推荐指数
1
解决办法
1470
查看次数