等效的 Swift NSURLSession 或 Alamofire Curl 帖子

Posted

技术标签:

【中文标题】等效的 Swift NSURLSession 或 Alamofire Curl 帖子【英文标题】:Equivalent Swift NSURLSession or Alamofire Curl post 【发布时间】:2016-05-24 23:17:46 【问题描述】:

我的这个 curl 帖子可以正常工作,但是对于我的一生,我无法让它与 NSURLSession 或 Alamofire 一起工作。返回正常的卷曲是:

curl https://api.truevault.com/v1/vaults/XXXXXX-XXXX-XXXX-XXXX-XXXXXXXX/blobs \
-X POST \
-u yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyy: \
--form "file=@foo.pdf" \
-H "Content-Type:multipart/form-data"

无论我使用哪种 curl 或 NSURLSession 变体,我都会收到 401 错误,但使用 curl 可以成功完成!请帮忙!谢谢!

当前的 ALAMOFIRE 尝试

        let headers = ["Authorization": Config.trueVaultKey, "Content-Type": "multipart/form-data"]

        Alamofire.upload(
        Alamofire.Method.POST,
        url!,
        headers: headers,
        multipartFormData:  multipartFormData in
            multipartFormData.appendBodyPart(
                data: dat!,
                name: "file",
                fileName: "license.png",
                mimeType: "image/png"
            )
        ,
        encodingCompletion:  encodingResult in
            switch encodingResult 

            case .Success(let upload, _, _):
                upload.responseString  response in
                    //JSON = response.result.value! as String
                    debugPrint(response)

                    print("\n\n\nREQUEST HEADER: \(response.request!.allHTTPHeaderFields!)")
                    print("\n\n\nREQUEST BODY: \(response.request!.HTTPBody)")
                    print("\n\n\nREQUEST BODY STREAM: \(response.request!.HTTPBodyStream)")
                
            case .Failure(let encodingError):
                print(encodingError)
            
    )

【问题讨论】:

你能发布你的 swift 代码吗? 使用 swift 代码更新 我认为你不需要设置标题,多部分会自动添加。不知道什么是授权,但我在你的 cURL 中看不到它。是 XXXX-XXXX-XXXX 吗?所以它应该出现在 URL 而不是标题中。 【参考方案1】:

尝试像这样构建您的 URL:

 let userAuth = "username:password" // credential
 let url = "https://\(userAuth)@api.truevault.com/v1/vaults/XXXXXX-XXXX-XXXX-XXXX-XXXXXXXX/blobs" // notice the at(@) sign

不要设置标题,它们会自动设置。

【讨论】:

谢谢,但这也不起作用......仍然得到 401 你能用你调用的 URL 更新你的代码吗?如果有任何凭证,让它们显示为“用户名”、“密码”。拥有 xxxx 和 yyyy 很难阅读。

以上是关于等效的 Swift NSURLSession 或 Alamofire Curl 帖子的主要内容,如果未能解决你的问题,请参考以下文章

NSURLSession,完成块,Swift

带有 NSURLSession 的 Swift 中的 HTTP 请求

Swift 中这些 NSURLSession 方法的代表是啥?

swift NSURLSession_Example.swift

swift NSURLSession + Synchronous.swift

swift NSURLSession + Synchronous.swift