我想向Twitter API發送一個POST請求,以獲取bearer_token作爲應用程序唯一身份驗證的一部分。我已將他們的文檔(https://dev.twitter.com/oauth/application-only)按照我的客戶密鑰和消費者密鑰進行了URL編碼和連接。然後我把它放在一個名爲auth_string的字符串中,你會在請求中看到。我也按照文檔向請求添加了靜態頭部值。問題是將HTTPBody作爲「grant_type = client_credentials」(Twitter在文檔中要求的方式)傳遞。HTTPBody - Swift POST請求 - 推特
我想這三種方法:
- 我試着將它作爲一個字符串,並沒有工作,因爲我想我不能在該類型傳遞給HTTPBody構建失敗。
- 我試圖將字符串轉換爲NSData,然後發送請求,如下所示:Creating NSData from NSString in Swift - 但這似乎不起作用 - 當我將NSData變量輸出到控制檯時,它看起來像這樣:「httpbody:Optional(< 6772616e 745f7479 70653d63 6c69656e 745f6372 6564656e 7469616c 73>)「,並且當我在創建它之前打印請求時,甚至沒有看到任何內容 - 只能看到我之前設置的標題字段。
- 我試着製作一個像這樣的方法的NSDictionary對象:http://jamesonquave.com/blog/making-a-post-request-in-swift/#jumpSwift但我再次發送請求之前看不到正確的正文,並且我沒有從Twitter端點獲得正確的響應。
任何提示,非常感謝!下面的代碼顯示了我上面列出的第二種方法。
//auth_string is used as authorization field in header of http request
let auth_string:NSString = "Basic \(key_sec_base64)"
let http_body = "grant_type=client_credentials".dataUsingEncoding(NSUTF8StringEncoding)
var bearer_token_request = NSMutableURLRequest(URL: NSURL(string: "https://api.twitter.com/oauth2/token"))
var bearer_token_session = NSURLSession.sharedSession()
bearer_token_request.HTTPMethod = "POST"
var err: NSError?
bearer_token_request.addValue("application/x-www-form-urlencoded;charset=UTF-8", forHTTPHeaderField: "Content-Type")
bearer_token_request.addValue((auth_string), forHTTPHeaderField: "Authorization")
bearer_token_request.addValue("gzip", forHTTPHeaderField: "Accept-encoding")
bearer_token_request.addValue("api.twitter.com", forHTTPHeaderField: "Host")
bearer_token_request.HTTPBody = http_body
println("httpbody: \(bearer_token_request.HTTPBody)")
println(bearer_token_request)
let task = bearer_token_session.dataTaskWithRequest(bearer_token_request, completionHandler: {(data, response, error) in
println(data)
})
task.resume()
爽哦,這是很容易其實我只是用你的建議的最終結果我從Twitter獲得回來,他們實際上向我發送了我需要的JSON響應,當我將其轉換回字符串時! – bkopp 2014-10-12 17:11:48