前提・実現したいこと
URLSesstion(Post)で商品をカートに入れたい。
発生している問題・エラーメッセージ
とあるサイトに対して、URLSesstion(Post)で商品をカートに入れた後に、URLSesstion(Get)でカートの中身を取得してもカートに中身がありません。(取得したjsonを表示すると [] になります)。
どのような原因が考えられるでしょうか。解決策はあるでしょうか。
該当のソースコード
Swift
1// 商品をカートに入れる処理 2static func cartin() { 3 4 var request = URLRequest(url: URL(string: "https://example/add"))!) 5 let postData: [String: Any] = [...省略...] 6 request.httpMethod = "POST" 7 guard let httpBody = try? JSONSerialization.data(withJSONObject: postData, options: []) else { return } 8 request.httpBody = httpBody 9 URLSession.shared.dataTask(with: request) { (data, response, error) in 10 if error == nil, let response = response as? HTTPURLResponse { 11 print("Content-Type: (response.allHeaderFields["Content-Type"] ?? "")") 12 print("statusCode: (response.statusCode)") 13 self.showCart() 14 } 15 }.resume() 16} 17 18// カートの中身を確認する処理 19static func showCart() 20{ 21 let request = URLRequest(url: URL(string: "https://example/cart.json")!) 22 //20210913追加 23 request.setValue("_session_id=XXXXX", forHTTPHeaderField: "Cookie") 24 URLSession.shared.dataTask(with: request) { (data, response, error) in 25 if error == nil, let response = response as? HTTPURLResponse, let data = data { 26 print("Content-Type: (response.allHeaderFields["Content-Type"] ?? "")") 27 print("statusCode: (response.statusCode)") 28 let json = String(data: data, encoding: .utf8)! 29 print(json) // !! 30 } 31 }.resume() 32}
試したこと
URLSessionConfiguration.defaultの使用:解決せず。
同じコードをChrome拡張機能(ajax)で実装:問題なくカートの中身が取得できます。
(2021/09/13追記)
一連の流れをブラウザで確認したところ、カートに入れたときの応答ヘッダーのContent-Typeはtext/javascriptで、Set-CookieにsessionIdが含まれていました。その後、カート内容表示する際にsessionIdを渡していました。
当プログラムのカート内容表示処理(showCart())で、sessionIdを設定したところ正常にカート内容が表示されました。
ただ、当プログラムのカートに入れる処理(cartin())で返ってくるContent-Typeはtext/htmlで、そのhtmlを確認するとDOMContentLoadedでsessionIdを作成しているようでした。WKWebView等で実装しないとダメなのかもしれないです。。。
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー