ios - HTTPBody - Swift POST 请求 - 推特

标签 ios post twitter swift httprequest

我正在尝试向 Twitter API 发送 POST 请求以获取 bearer_token 作为仅应用程序身份验证的一部分。我已经按照他们的文档 ( https://dev.twitter.com/oauth/application-only ) 对 URL 进行了编码,并通过我的消费者 key 和消费者 secret 进行了连接。然后我将其放入一个名为 auth_string 的字符串中,您将在请求中看到它。我还按照文档将静态 header 值添加到请求中。问题是将 HTTPBody 作为“grant_type=client_credentials”传递(Twitter 在文档中要求的方式)。

我为此尝试了三种方法:

  1. 我尝试将其作为字符串传递,但没有成功,构建失败,因为我想我无法将该类型传递给 HTTPBody。
  2. 我尝试在发送请求之前将字符串转换为 NSData,如下所示:Creating NSData from NSString in Swift - 但这似乎也不起作用 - 当我将该 NSData 变量打印到控制台时,它看起来像这样:“httpbody: Optional(<6772616e 745f7479 70653d63 6c69656e 745f6372 6564656e 7469616c 73>)”,当我打印请求时在制作它之前,我什至在正文中看不到任何东西——只看到我之前设置的标题字段。
  3. 我试着用这种方法制作一个 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()

最佳答案

when I print that NSData variable to the console it looks like this: "httpbody: Optional(<6772616e 745f7479 70653d63 6c69656e 745f6372 6564656e 7469616c 73>)",

因为是可选类型:类型是Optional<NSData>

如果你这样做 println(data!) , 它会去掉 Optional<>部分。

然后您可能需要转换 data返回string按照您的预期查看数据(“grant_type=client_credentials”)

关于ios - HTTPBody - Swift POST 请求 - 推特,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26319102/

相关文章:

iOS将按钮的发送事件从Touch Down更改为Touch UP Inside?

Android - 如何直接将推文发布到 Twitter(没有隐式 Intent 或其他应用程序)?

java - 将 libGDX 中的图像保存到 iOS Gallery

ios - 如何将文本字段输入 View 作为搜索栏?

php - 为什么我的 POST file_get_contents 返回 HTTP 错误请求?

在Lua中POST数据

java - 为什么 OkHttp post 方法发送的是 get 请求而不是 post 请求?

asp.net - Tweetsharp .NET 库无法在线工作

java - 来自json字符串的具体信息

ios - Delphi更改IOS StatusBar颜色