【问题标题】:NSURLSession returns different response than browser would, why?NSURLSession 返回的响应与浏览器不同,为什么?
【发布时间】:2015-12-30 17:05:11
【问题描述】:

知道为什么NSURLSession 返回此响应:

您提供的授权类型不受支持。只有基本和 支持 OAuth

let username = "8r6nibK8Pe28WFhjTX1gGb1Rhhhc7xM02v7XKRPedL4"
let password = "8r6nibK8Pe28WFhjTX1gGb1Rhhhc7xM02v7XKRPedL4"
let loginString = NSString(format: "%@:%@", username, password)
let loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)!
let base64LoginString = loginData.base64EncodedStringWithOptions(.Encoding64CharacterLineLength)

let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let authString = "Basic \(base64LoginString)"
config.HTTPAdditionalHeaders = ["Authorization" : authString]

let url = NSURL(string: "https://api.datamarket.azure.com/Bing/Search/Image?$format=json&Query='Rambo'+'Oscar'")
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"

let a = NSURLSession(configuration: config).dataTaskWithRequest(request, completionHandler: {data, urlResponse, error in

    if data != nil {

        let str = NSString(data: data!, encoding: NSUTF8StringEncoding)
        print(str)
    } else {
        _ = 7
    }
})

a.resume()

浏览器返回带有有意义的图像信息的不同响应。我正在使用基本身份验证来发送请求。

【问题讨论】:

标签: ios ios9 nsurlsession


【解决方案1】:

问题可能是选项:.Encoding64CharacterLineLength。试试:

let base64LoginString = loginData.base64EncodedStringWithOptions([])

要调查使用Charles Proxy 来查看请求中的差异。 – zaph 10 分钟前

【讨论】:

  • 您也不应该自己创建授权标头。 URL 加载系统提供了对身份验证的内置支持,因此操作系统可以随时踩到该标头。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
相关资源
最近更新 更多