【问题标题】:android twitter4j oauth does not works when on 3gandroid twitter4j oauth 在 3g 上不起作用
【发布时间】:2012-02-08 08:19:44
【问题描述】:

我使用 twitter4j 创建了一个安卓应用。

在 3g 上没有任何 api 调用可以进行身份​​验证,但在 wi-fi 上可以正常工作。 可能是什么问题?

【问题讨论】:

  • 我有这个确切的问题,奇怪:/

标签: android twitter twitter-oauth twitter4j 3g


【解决方案1】:

我已经对此进行了广泛的测试,可以确认这只是 Android 4.0 (ICS) 设备上的问题。为什么,我还不确定,虽然 HttpURLConnection 的某些部分在 4.0 中发生了变化,所以其中一些变化使 twitter4j 不兼容。

我想可能是这样的: Android 4.0 ICS turning HttpURLConnection GET requests into POST requests

但是在使用 tcpdump 分析请求之后,它似乎实际上是在进行有效的 GET,但由于某种原因,twitter api 仍然说这是一个错误的请求..

GET /1/users/show.json?include_entities=true&user_id=6842472 HTTP/1.1
Authorization: OAuth oauth_consumer_key="<redacted>",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1331150787",oauth_nonce="2157367237",oauth_version="1.0",oauth_token="<redacted>",oauth_signature="<redacted>"
Accept-Encoding: gzip
X-Twitter-Client-URL: http://twitter4j.org/en/twitter4j-2.2.5.xml
User-Agent: twitter4j http://twitter4j.org/ /2.2.5  
X-Twitter-Client-Version: 2.2.5
X-Twitter-Client: Twitter4J   
Host: api.twitter.com  
Connection: Keep-Alive


HTTP/1.1 400 Bad Request
Date: Wed, 07 Mar 2012 20:06:30 GMT    
Status: 400 Bad Request   
X-RateLimit-Class: api
X-RateLimit-Reset: 1331153824 
X-Revision: DEV 
Last-Modified: Wed, 07 Mar 2012 20:06:30 GMT  
X-Frame-Options: SAMEORIGIN 
X-Transaction: a0bf805e990a5c79
Content-Type: application/json; charset=utf-8 
X-RateLimit-Remaining: 0 
X-RateLimit-Limit: 150
Pragma: no-cache
Cache-Control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0
X-Runtime: 0.00742
X-MID: 2295d07237fcb4763f7f54d2bf46e27dd40e022f
Expires: Tue, 31 Mar 1981 05:00:00 GMT
Vary: Accept-Encoding
Server: tfe
Transfer-Encoding: chunked
Connection: close
Content-Encoding: gzip
Set-Cookie: 
...

除非有人能在 ICS/HttpURLConnection 中找到破坏这一点的东西,否则我能看到的唯一解决方法是为 twitter4j 编写一个使用 HttpClient 而不是 HttpURLConnection 的备用后端,这正是我打算做的。

编辑:所以我为 twitter4j 编写了一个使用 apache httpclient 的客户端后端,它遇到了完全相同的问题!!更多的不眠时间和wireshark给我带来了以下非常方便的解决方案,它确实有效:

像这样初始化你的 twitter4j 实例:

ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.setOAuthConsumerKey(Const.CONSUMER_KEY);
configurationBuilder.setOAuthConsumerSecret(Const.CONSUMER_SECRET);
configurationBuilder.setUseSSL(true);
Configuration configuration = configurationBuilder.build();
twitter = new TwitterFactory(configuration).getInstance();

setUseSSL(true) 是一条神奇的线。

【讨论】:

  • 你是一个活生生的救星,gj 和你的努力的荣誉
猜你喜欢
  • 2013-12-17
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
相关资源
最近更新 更多