ios - Stopping NSURL Connection before redirect, while getting the redirect URL -
i trying response body of url, redirects invalid url. stop redirection well, since crashes app.
i have tried using following methods within code, aren't picked up:
func urlsession(_ session: nsurlsession, datatask datatask: nsurlsessiondatatask, didreceiveresponse response: nsurlresponse, completionhandler completionhandler: (nsurlsessionresponsedisposition) -> void) { print("did here?") } func urlsession(_ session: nsurlsession, task task: nsurlsessiontask, didcompletewitherror error: nserror?) { print("how here?") } func urlsession(_ session: nsurlsession, task task: nsurlsessiontask, willperformhttpredirection response: nshttpurlresponse, newrequest request: nsurlrequest, completionhandler completionhandler: (nsurlrequest?) -> void) { print("maybe here?") } func urlsession(_ session: nsurlsession, didbecomeinvalidwitherror error: nserror?) { print("did find error?") }
any ideas on can do?
edit: so, updates code have gives me no errors using xcode 7:
class example: nsobject, nsurlsessiondelegate, nsurlsessiontaskdelegate { override init() { super.init() let mysession = nsurlsession(configuration: nsurlsessionconfiguration.ephemeralsessionconfiguration(), delegate: self, delegatequeue: nsoperationqueue.mainqueue()) // put handler second parameter. let data = try!mysession.datataskwithurl(nsurl(string: "http://www.google.com")!, completionhandler: myhandler) data!.resume() } // create handler following signature, , read response body. func myhandler(data: nsdata?, response: nsurlresponse?, error: nserror?) -> void { // in case “encoding” nsasciistringenconding. depends on website. let responsebody = nsstring(data: data!, encoding: nsasciistringencoding) print(responsebody) } // handles redirection private func urlsession(session: nsurlsession, task: nsurlsessiontask, willperformhttpredirection response: nshttpurlresponse, newrequest request: nsurlrequest, completionhandler: (nsurlrequest!) -> void) { // stops redirection, , returns (internally) response body. completionhandler(nil) }
}
to stop redirect , response body should call completionhandler
nil
parameter.
after stop redirect, urlsession call handler specified, when created http request datataskwithurl:completionhandler:
(could datataskwithrequest:completionhandler:
). in handler responde body. example:
import foundation class example: nsobject, nsurlsessiondelegate, nsurlsessiontaskdelegate { override init() { super.init() let mysession = nsurlsession(configuration: nsurlsessionconfiguration.ephemeralsessionconfiguration(), delegate: self, delegatequeue: nsoperationqueue.mainqueue()) // put handler second parameter. let data = mysession.datataskwithurl(nsurl(string: "http://www.google.com")!, completionhandler: myhandler) data.resume() } // create handler following signature, , read response body. func myhandler(data: nsdata!, response: nsurlresponse!, error: nserror!) -> void { // in case “encoding” nsasciistringenconding. depends on website. let responsebody = nsstring(data: data, encoding: nsasciistringencoding) println(responsebody) } // handles redirection func urlsession(session: nsurlsession, task: nsurlsessiontask, willperformhttpredirection response: nshttpurlresponse, newrequest request: nsurlrequest, completionhandler: (nsurlrequest!) -> void) { // stops redirection, , returns (internally) response body. completionhandler(nil) } }
i know works http 302 code, others 301 (moved permanently) or 308 don't know if works.
worth adding (about urlsession:task:willperformhttpredirection:newrequest:completionhandler:
):
this method called tasks in default , ephemeral sessions. tasks in background sessions automatically follow redirects.
Comments
Post a Comment