How to get results from an CGI request with Swift

Hi,

i have some issues to get the values result of a CGI request GET from a camera device.

actually in safari when I paste the local link to my camera with this http request :

://X.X.X.X/cgi-bin/modelreqcgi?action=get


I get this result in safari :
version=1.1.8;model=cbv4pro;

so now I want to get the result and theses fields with her values, but unfortunately with my URL request I never see the values.
please see below my code :

Code Block language
struct ResponseScan: Decodable {
    let versionScan: String
    let modelScan: String
}



Code Block language
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var messageLabel: UILabel!
@IBOutlet weak var UpdateProgress: UIProgressView!
@IBOutlet weak var Radar: UIButton!
@IBOutlet var UpdateProgressCollection: [UIProgressView]!
//:: Action sur le bouton Scan :://
@IBAction func RadarScan(_ sender: Any) {
let urlScanType = "http://192.168.2.1/cgi-bin/model_req_cgi?action=get"
if let urlScan = URL (string: urlScanType)
{
var requestScan = URLRequest (url: urlScan)
requestScan.httpMethod = "GET"
URLSession.shared.dataTask(with: requestScan) { data, response, error in
if let data = data {
print("value de data -> \(String.data)")
print("value de response -> \(response)")
do{
//let jsonData = data.data(using: .utf8)!
let decoder = JSONDecoder ()
let jsonData: ResponseScan = try decoder.decode(ResponseScan.self, from: data)
print("Version -> \(jsonData.versionScan)")
print("Modèle -> \(jsonData.modelScan)")
}
catch{}
}
}.resume()
print("Finish !!!!!!!!")
}
}


is there anybody who can help me please ??


best regards



First of all, the response version=1.1.8;model=cbv4pro; is not in JSON format.
So, Decodable or JSONDecoder would not work, and you may need to decode it by yourself.

Assuming you get non-nil data in your dataTask, you may need to write something like this:
Code Block
if let data = data {
print("value de response -> \(response)")
guard let responseText = String(data: data, encoding: .utf8) else {
print("Unknown encoding")
return
}
print("responseText -> \(responseText)")
var version: String?
var model: String?
let regex = try! NSRegularExpression(pattern: #"([a-z]+)=([^;]+);"#, options: [])
for match in regex.matches(in: responseText, range: NSRange(0..<responseText.utf16.count)) {
let keyRange = Range(match.range(at: 1), in: responseText)!
let valueRange = Range(match.range(at: 2), in: responseText)!
let key = responseText[keyRange]
let value = String(responseText[valueRange])
print(key, value)
if key == "version" {
version = value
} else if key == "model" {
model = value
}
}
let responseScan = ResponseScan(versionScan: version ?? "?", modelScan: model ?? "?")
print("Version -> \(responseScan.versionScan)")
print("Modèle -> \(responseScan.modelScan)")
} else {
print("`data` is nil")
}

Please replace your line 27...39 with the code above.
Hi !
many thanks for your help and support, it's working, fantastic !

have a good day !!

best regards


How to get results from an CGI request with Swift
 
 
Q