NSURLConnection was deprecated with iOS 9. However, you can use its replacement, NSURLSession.
This is a very basic example of how to use NSURLSession with parameters and how to get the response.
You can pass your parameters as a dictionary as second argument to the validate method.
I think @omz advised against using objc_util.retain_global, but it's necessary in this example to prevent the block from getting released before its getting called by the URL session.
In a proper implementation, you probably want to create a Python class so that you can store the completion handler.
#!/usr/bin/env python3
import objc_util
import urllib.parse
from ctypes import c_void_p
NSURLRequest = objc_util.ObjCClass("NSURLRequest")
NSURLSession = objc_util.ObjCClass("NSURLSession")
NSURLSessionConfiguration = objc_util.ObjCClass("NSURLSessionConfiguration")
def validate(url, params, responseHandler):
if params:
params_encoded = urllib.parse.urlencode(params)
else:
params_encoded = ""
url = objc_util.nsurl("{}?{}".format(url, params_encoded))
request = NSURLRequest.request(URL=url)
configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
session = NSURLSession.session(Configuration=configuration)
completionHandler = objc_util.ObjCBlock(responseHandler, restype=None, argtypes=[c_void_p, c_void_p, c_void_p, c_void_p])
objc_util.retain_global(completionHandler)
dataTask = session.dataTask(Request=request, completionHandler=completionHandler)
dataTask.resume()
def responseHandlerBlock(_cmd, data, response, error):
if error is not None:
error = objc_util.ObjCInstance(error)
print(error)
return
response = objc_util.ObjCInstance(response)
data = objc_util.ObjCInstance(data)
print(str(objc_util.nsdata_to_bytes(data)))
url = "http://validate.jsontest.com"
params = {"json" : {"first" : "lukas", "last" : "kollmer"}}
validate(url, None, responseHandlerBlock)