URLSession.shared.dataTaskでデータがうまく取得出来ない
Swift 4 で書かれた下記のコードでデータを取得していますが取得がうまくいきません。
ほかのアドレスではデータの取得が出来ますが、下記のアドレスではdata=nil
となりエラーになります。
問題点は2点です(原因は1点かもしれませんが)。
- dataがnilではないときに「データ抽出」部分が走るはずですが、dataにnilが入っており、正常なデータを取得出来ません。
(if (data != nil && err == nil)
としており、その下ではnilではないことが保証されると思うのですが実際にはnil入っている為、エラーになる) data=nil
になっておりhttps://trackings.post.japanpost.jp/m/services/srv/search/?requestNo1=123456789012&search=%8AJ%8En
とブラウザで打ち込んだときと同等の正しいデータが取得出来ない
//HTTPリクエスト作成
let url = URL(string: "https://trackings.post.japanpost.jp/m/services/srv/search/?" +
"requestNo1=123456789012&search=%8AJ%8En")
let req = NSMutableURLRequest(url: url!)
req.httpMethod = "GET"
var waiting = true
let task = URLSession.shared.dataTask(with: req as URLRequest , completionHandler: { data, res, err in
if (data != nil && err == nil){
let text = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
DispatchQueue.main.async(execute: {
//データ抽出
let arr = text!.components(separatedBy: "お問い合わせ番号")
if arr.count == 1 {
//有効なデータが帰ってこない場合
result = "エラー"
} else {
result = text! as String
}
waiting = false
})
} else {
DispatchQueue.main.async(execute: {
})
}
})
result = result.uppercased()
task.resume()
while (waiting) {
RunLoop.current.run(mode: RunLoopMode.defaultRunLoopMode, before: Date())
}
//結果を出力
print(result)
ご指導のほど、よろしくお願いいたします。
追記
let arr = text!.components(separatedBy: "お問い合わせ番号")
のところで、Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
となる。