Post Daten einer URLSession komprimieren

  • Post Daten einer URLSession komprimieren

    Hi,

    eine von mir zu entwickelnde App muss an ein PHP Backend per POST Daten senden. Das PHP Backend möchte gerne die POST Daten komprimiert bekommen und benutzt PHP gzinflate. Auf der php.net Seite ist auch ein toller Beispielcode für Android der von unseren Android Entwicklern auch genau so benutzt wird. Ich suche nun nach einer Möglichkeit das selbe in iOS zu machen. Meine bisherigen Versuche sind alle gescheitert. Hier ist meine Function:


    Quellcode

    1. func requestBLELocation(uuid:[String], major:[Int32], minor:[Int32], rssi:[Int]) {
    2. let url = URL(string: "https://myurl.de/")!
    3. var request = URLRequest(url: url)
    4. request.setValue("deflate", forHTTPHeaderField: "Content-encoding")
    5. request.setValue("application/octet-stream", forHTTPHeaderField: "Content-type")
    6. request.httpMethod = "POST"
    7. var postString = ""
    8. for v in 0...uuid.count-1 {
    9. postString = postString + "uuid=\(uuid[v])&major=\(major[v])&minor=\(minor[v])&level=\(rssi[v])|"
    10. }
    11. request.httpBody = postString.data(using: .utf8)
    12. let task = URLSession.shared.dataTask(with: request) { data, response, error in
    13. guard let data = data, error == nil else { // check for fundamental networking error
    14. print("error=\(String(describing: error))")
    15. return
    16. }
    17. if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors
    18. print("statusCode should be 200, but is \(httpStatus.statusCode)")
    19. print("response = \(String(describing: response))")
    20. }
    21. let responseString = String(data: data, encoding: .utf8)
    22. print("responseString = \(String(describing: responseString!))")
    23. }
    24. task.resume()
    25. }
    Alles anzeigen
    Natürlich schlägt der Aufruf fehl, denn ich (so vermute ich zumindest) komprimiere ja nichts, sondern setze nur einen Header. Ich habe keine Idee wie ich die Postdaten komprimieren soll, damit das Backend diese Entgegen nimmt. Hat hier vielleicht jemand eine Lösung für mich?

    Vielen Dank im voraus

    Dirk
  • Danke, das Github Projekt hat tatsächlich geholfen. Leider ist es für mich ein bisschen wie mit Kanonen auf Spatzen schießen deswegen cocoapods zu installieren. Wie bekomme ich es hin wenn ich nur das Swift File in mein Projekt kopiere, das ich trotzdem auf die Properties zugreifen kann? Ein "Import DataCompression" funktioniert da wohl dann nicht, oder?