2014-01-20 64 views
0

這是我第一次嘗試讓REST調用通過Firefox的POST工作。我所生成的令牌與所需要的驗證串如下:Twitter REST API調用401 Unothorized

oauth_consumer_key

oauth_nonce

oauth_signature

oauth_signature_method

oauth_timestamp

組oauth_token

訂單計量器嗎?因爲我不明白我是否缺少其他東西。這裏是我的要求

https://api.twitter.com/1.1/search/tweets.json?q=&geocode=30.0444,31.2357,1km&until=2013-11-30&result_type=mixed&oauth_consumer_key=0xxxQ&oauth_nonce=bcbcxxx8&oauth_signature=pXXXglKjY%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1390221337&oauth_token=2287933520-fuxxxR0&count=100 

的迴應是:

401 Unouthorized 
{"errors":[{"message":"Could not authenticate you","code":32}]} 

任何人都可以幫助嗎?

感謝,

編輯1

麥克建議的控制檯,它實際工作從控制檯,但控制檯提示您登錄所以它所管理的授權,這是罰款

現在我知道我的請求有效,如何將這些參數添加到$.ajax調用中?我嘗試添加以下內容:

beforeSend : function(req) { 
req.setRequestHeader('Authorization', auth); 
}, 

其中「權威性」是「OAuth oauth_consumer_key=...」但我得到一個錯誤的請求錯誤400

想法嗎?

感謝,

回答

0

每Twitter的authorizing a request頁面,你需要通過授權頭在您的OAuth參數傳遞,而不是在查詢參數。在該網頁上給出

實施例(將所有的OAuth字段的在同一行上,沒有新行):

POST /1/statuses/update.json?include_entities=true HTTP/1.1 
Accept: */* 
Connection: close 
User-Agent: OAuth gem v0.4.4 
Content-Type: application/x-www-form-urlencoded 
Authorization: 
     OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog", 
       oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", 
       oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D", 
       oauth_signature_method="HMAC-SHA1", 
       oauth_timestamp="1318622958", 
       oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb", 
       oauth_version="1.0" 
Content-Length: 76 
Host: api.twitter.com 

status=Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21 
+0

感謝邁克...我發現在我的應用程序的頁面整個字符串,我重新創建我的令牌和再生的字符串。 我的最終意圖是在JQuery/Ajax請求中將其設置爲REST調用,但現在我試圖通過Poster(Firefox嗅探器)獲取數據以確保它可以工作。 我試圖添加它作爲標題,將授權作爲名稱和整個字符串(在一行中)作爲值。我仍然得到同樣的錯誤。 – mzereba

+0

不確定爲什麼授權不適合您。確保你有第一個「OAuth」字符串,加上字段之間的逗號。我的建議是嘗試[Twitter控制檯](https://apigee.com/console/twitter)來嘗試API。確保您在下拉列表中選擇了版本1.1。它將向您顯示在有效負載,查詢參數和標題中發送的內容。我能夠使用此工具併成功地致電tweets.json。還要注意,上面的示例有一個空查詢參數(... tweets.json?q =&geocode = 30.0444,31.2357,1km ...),我不確定是否允許。 –

+0

感謝@MikeDunker ...所以在控制檯它的工作原理,並讓我回200 OK(當我通過讓它重定向我發送請求之前登錄進行身份驗證),所以我認爲我的電話是正確的。如果我想包含這些在一個Ajax請求將它是 'beforeSend:function(req){ req.setRequestHeader('Authorization',auth); }' 或者乾脆 '頭:{ '的Accept-Encoding': 「壓縮」, '授權':用戶id}' – mzereba

0

另一個疑難雜症。事實證明,UrlEncode的默認.NET實現以小寫形式輸出百分比編碼。看起來Twitter預計小寫編碼,當參數小寫時返回401。

下面是一些代碼來解決這個問題了:

.net UrlEncode - lowercase problem