I'm trying to make a SOAP request with Swift. Running the latest Xcode/iOS as of 9/9/14. I use an NSMutableURLRequest
that I add an HTTPBody to with the request info. However, Once I start an NSURLConnection
with the request, I get an error "Stream xxxxxxxxx is sending an event before being opened". I'm not using any networking libraries, just a plain old NSURLConnection
. Any thoughts on what could cause this error? Thanks!
Relevant code in use:
func createSOAPRequestWithEnvelope(soapEnvelope : String) {
//create request
var url = NSURL(string: "https://my-service-url")
var req = NSMutableURLRequest(URL: url, cachePolicy: NSURLRequestCachePolicy.UseProtocolCachePolicy, timeoutInterval: 5000)
req.addValue("text/xml", forHTTPHeaderField: "Content-Type")
req.HTTPMethod = "POST"
req.HTTPBody = soapEnvelope.dataUsingEncoding(NSUTF8StringEncoding)
//begin connection
var connection = NSURLConnection(request: req, delegate: self, startImmediately: false)
connection.scheduleInRunLoop(NSRunLoop.mainRunLoop(), forMode: NSDefaultRunLoopMode)
connection.start() //error happens after this command :(
}
//takes care of NTLM Authentication
func connection(connection: NSURLConnection!, didReceiveAuthenticationChallenge challenge: NSURLAuthenticationChallenge!) {
var authMethod = challenge.protectionSpace.authenticationMethod
if authMethod == NSURLAuthenticationMethodNTLM {
var credential = NSURLCredential(user: self.username,
password: self.password,
persistence: NSURLCredentialPersistence.ForSession)
challenge.sender.useCredential(credential, forAuthenticationChallenge: challenge)
}
}
func connection(connection: NSURLConnection!, didReceiveResponse response: NSURLResponse!) {
// Response received, clear out data
self.transactionData = NSMutableData()
}
func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {
// Store received data
self.transactionData?.appendData(data)
}
The issue with Stream not Open seems to be directly i CFNetwork implementation. (reproducible when using NSConnection and also NSSession). It occurs for requests (responses) that needs to be chunked. A side-effect of this issue is that windows authentication is not working properly and each request needs to go through complete handshaking process. And it is not fixed also in iOS 8.1.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With