我正在尝试构建一个非常具体的HTTP请求,向服务器发送(即定义确切的HTTP标头集),但是NSURLSession会“有用地”插入一堆HTTP标头,如Accept、Accept-Language和Accept-Encoding。
考虑下面这个Playground(Swift 2.x)发送一个请求到一个服务,该服务只回显发送的HTTP标头:
您可以看到有三个“Accept”头被发送了。我该如何防止这种情况发生?
我尝试使用“request.setValue(nil, forHTTPHeaderField:“Accept-Language”)”来设置标头,但这被忽略了。尝试将其设置为“”,但没有效果。我还尝试操作NSURLSessionConfiguration上的HTTPAdditionalHeaders属性,但也没有用。
我该如何让NSURLSession不那么“热心助人”?
考虑下面这个Playground(Swift 2.x)发送一个请求到一个服务,该服务只回显发送的HTTP标头:
import Foundation
import XCPlayground
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
let url = NSURL(string: "http://httpbin.org/headers")!
let request = NSMutableURLRequest(URL: url, cachePolicy: .ReloadIgnoringLocalCacheData, timeoutInterval: 30000)
let configuration = NSURLSessionConfiguration.ephemeralSessionConfiguration()
let session = NSURLSession(configuration: configuration)
let task = session.dataTaskWithRequest(request) { (data: NSData?, response: NSURLResponse?, error: NSError?) in
print(NSString(data: data!, encoding: NSUTF8StringEncoding))
XCPlaygroundPage.currentPage.finishExecution()
}
task.resume()
您可以看到有三个“Accept”头被发送了。我该如何防止这种情况发生?
我尝试使用“request.setValue(nil, forHTTPHeaderField:“Accept-Language”)”来设置标头,但这被忽略了。尝试将其设置为“”,但没有效果。我还尝试操作NSURLSessionConfiguration上的HTTPAdditionalHeaders属性,但也没有用。
我该如何让NSURLSession不那么“热心助人”?
NSURLSession
基本上依赖于一些设置的头文件(它实际上发送了一些技术上不需要的头文件)。无论如何,如果我不想要这种行为,我需要降低级别。NSURLConnection
不好用,因为它在底层使用NSURLSession
。CFHTTPStream
可能是最好的选择,我可以使用CFHTTPMessage
进行 HTTP 解析。或者,我可以查看其他第三方库。感谢您的帮助和建议。 - Craig Edwards