我使用twitter4j创建了一个android应用程序。android twitter4j oauth在3g上不起作用
没有任何api调用可以在3G上进行身份验证,但在使用Wi-Fi时可以完美工作。 可能是什么问题?
我使用twitter4j创建了一个android应用程序。android twitter4j oauth在3g上不起作用
没有任何api调用可以在3G上进行身份验证,但在使用Wi-Fi时可以完美工作。 可能是什么问题?
我已经对此进行了广泛的测试,可以确认这只是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 HTTP客户端,它遭受了完全相同的问题!一些更不眠时间和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(真)是魔线。
你是一个活的保护者,gj和你的努力的荣誉 – 2013-06-24 08:50:53
我有这个确切的问题,奇怪:/ – brk3 2012-03-03 11:20:48