簡體   English   中英

android twitter4j oauth在3g上無效

[英]android twitter4j oauth does not works when on 3g

我用twitter4j創建了一個Android應用程序。

沒有api調用可以在3g上進行身份驗證,但在使用wi-fi時可以正常工作。 可能是什么問題呢?

我已經對此進行了廣泛測試,並且可以確認這只是Android 4.0(ICS)設備上的一個問題。 為什么,我還不確定,雖然HttpURLConnection的某些部分在4.0中發生了變化,因此其中一些變化使得twitter4j不兼容。

我認為可能是這樣的: Android 4.0 ICS將HttpURLConnection GET請求轉換為POST請求

但在用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的備用后端,這正是我打算做的。

編輯:所以我寫了一個使用apache httpclient的twitter4j的客戶端后端,它遇到了完全相同的問題! 更多的不眠時和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)是神奇的線條。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM