02.12.2012 22:28:00 • Categories: ASObjC • Tags: Asobjc, Nsurlconnection
ASObjC: NSURLConnection - http get and post
-- -- pgURLAppDelegate.applescript -- pgURL -- -- Created by goodtime on 4/10/11. -- Copyright 2011 NiceMac. All rights reserved.-- demonstrates doing a GET or POST Request using NSURLConnection. Runs in the Background (not in main thread) -- contains no UI... might add one later, for now it just logs or displays alerts -- see console log and feel free to change the URL -- reference material: http://cocoawithlove.com/2008/09/cocoa-application-driven-by-http-data.html
script pgURLAppDelegate property parent : class "NSObject" property self : current application's pgURLAppDelegate -- should match the script delegate name above
property myURL : "http://www.heise.de" -- URL of your request property postMethod : "POST" -- use POST for POST property myBody : "" -- PUT YOUR POST MESSAGE HERE if trying to do a POST
-- URL Request Encoding property myEncoding : NSUTF8StringEncoding of current application --code for UTF8
property getMethod : "GET" -- use GET for any other Requests property intermediateMsg : "" -- Text String returned from the request (may not be complete for long downloads) property entireMsg : "" -- All the Text String returned from the request
on pgURL(myURL, myBody, myMethod) -- String to NSURL tell class "NSURL" of current application set myURL to URLWithString(myURL) end tell
-- String tell class "NSString" of current application set myBody to stringWithString_(myBody) end
set myBody to myBody's dataUsingEncoding_(myEncoding)
tell class "NSString" of current application set myMethod to myMethod end
tell NSMutableURLRequest of current application set myRequest to requestWithURL_(myURL) end
tell myRequest setHTTPMethod_(myMethod) end
-- add the Message Body when sending a POST Method if myMethod = "POST" then tell myRequest setHTTPBody_(myBody) end end
-- form the connection set myConnection to (((current application's class "NSURLConnection")'s alloc)'s initWithRequestdelegate(myRequest, self)) end
-- handle the connection in the background (not in main thread) -- this is controlled by the next four threads on connectiondidReceiveResponse(myConnection, response)
tell class "NSHTTPURLResponse" of current application set statusText to (localizedStringForStatusCode_(statusCode of response)) as text set statusCode to (statusCode of response) as string end
-- if it fails to do anything, show what it didn't do here (the error) if statustext = "no error" then -- I am not really sure if this does anything or if it is reseting the returnData properly tell current application's returnData setLength_(0) end else display alert "HTTP Error: " & statusCode & return & "Error Message: " & statusText & "." end end
on connectiondidReceiveData(myConnection, returnData)
-- convert Data returned to String (Don't ever forget how to do this, it is a pain when do forget) set my intermediateMsg to (((current application's class "NSString")'s alloc)'s initWithDataencoding(returnData, current application's NSUTF8StringEncoding)) as string log "didReceivedData:"
log intermediateMsg & return & return
set my entireMsg to my entireMsg & intermediateMsg
end
on connectiondidFailWithError(myConnection,trpErr) -- display alert trpErr as string log trpErr
set EM to "" try set newError to (NSLocalizedDescription of userInfo of (trpErr)) as string on error EM -- if AppleScript can't do this, so what else is wrong set errorMore to EM end
display alert newError & return & return & errorMore end
on connectionDidFinishLoading_(myConnection) log "connection Finished."
-- here you can do what you want to do with the intermediateMsg log "here is your entire message returned:" log entireMsg
log "end of line." end
on applicationWillFinishLaunching_(aNotification) -- Insert code here to initialize your application before any files are opened
-- run the request here for demonstration purposes pgURL_(myURL, myBody, getMethod)
end applicationWillFinishLaunching_
on applicationShouldTerminate(sender) -- Insert code here to do any housekeeping before your application quits return current application's NSTerminateNow end applicationShouldTerminate
end script