質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

2120閲覧

エラー:nw_protocol_get_quic_image_block_invokeの解消について

quwant

総合スコア4

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2021/05/27 08:06

編集2021/05/28 02:22

<やりたいこと>
APIを叩いて、その結果をViewに表示したい

<現状>
POSTリクエストを投げられる状態まではできています。
下記に現状のリクエスト送信メソッドを記載しておきます。

<問題点>
POSTリクエストを投げると掲題にある「エラー:nw_protocol_get_quic_image_block_invoke」が発生しプログラムが終了します。このエラーの解決方法をご存知の方がいらっしゃれば、ぜひ教えていただきたいです。

Swift

1class SendReqest { 2 func sendReqest(_ methodType: String, _ urlString: String, _ headers: Dictionary<String, String>){ 3 let url: URL = URL(string: urlString)! 4 var reqestUrl = URLRequest(url: url) 5 6 reqestUrl.httpMethod = methodType 7 8 for (key, value) in headers{ 9 print("key&value >>> (key) & (value)") 10 reqestUrl.addValue(key, forHTTPHeaderField: value) 11 } 12 13// let task = URLSession.shared.dataTask(with: reqestUrl, completionHandler: {data, response, error in 14 let task = URLSession.shared.dataTask(with: reqestUrl){(data, response, error) in 15 if (error == nil) { 16 guard let _data = data else { 17 print("SendReqest guard") 18 return 19 } 20 if let result = String(data: _data, encoding: .utf8) { 21 print("result >>> (result)") 22 } 23// DispatchQueue.main.async { 24// let result = String(data: data!, encoding: .utf8)! 25// print("result >>> (result)") 26// } 27 } else { 28 let statusCode = (response as! HTTPURLResponse).statusCode 29 print("StatusCode >>> (statusCode)") 30 print("Error >>> (String(describing: error))") 31 } 32// }) 33 } 34 task.resume() 35 } 36}

▼エラーログ

2021-05-28 10:43:50.128307+0900 ShowJsonApp[1448:90011] [] nw_protocol_get_quic_image_block_invoke dlopen libquic failed result >>> {"cause":"BUSINESS_ERROR","errors":[{"field":"_global","code":"FORBIDDEN","data":{}}]}

▼参照サイト
1、【SwiftUI】Likeボタンとリスト内セルにボタンを実装する場合の注意点

2、Strange error nw_protocol_get_quic_image_block_invoke dlopen libquic failed

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomato879241

2021/05/27 08:24

1. 「エラー:nw_protocol_get_quic_image_block_invoke」が発生し、とありますが、どこででしょうか? 2. どうも「URLSession.shared.dataTask」の使い方がおかしいように見えますが。。。
quwant

2021/05/28 01:26 編集

ご回答いただきありがとうございます。 エラー文を追記いたしました。 ログを見るとおそらく、 let task = URLSession.shared.dataTask(with: reqestUrl, completionHandler: {data, response, error in ここの部分でエラーが出ているようです。やはり、URLSession.shared.dataTaskの使い方が原因なんでしょうか?少し使い方を調べてみます。。。
tomato879241

2021/05/28 01:29

resultをforce-unwrapするのは良くないです。またDispatchQueue.main.asyncも必要ありません。以下のように直してみてください。 if let result = String(data: data, encoding: .utf8) { print("result \(result)") }
tomato879241

2021/05/28 01:40

URLSessionのdataTaskに関しては、dataTaskをタイプした後、Xcodeに続きを書かせて、 (Data?, URLResponse?, Error?) -> Void) を選択した後、リターン・キーを叩くと、「completionHandler」の部分は消え、 dataTask(with: URLRequest) { (Data?, URLResponse?, Error?) in になるはずです。
quwant

2021/05/28 02:06

質問内容のコードを修正しました。現在のコードです。 また、エラーログに関しては私の勘違いでした、現在記載の内容が正です。 ご指摘いただいたDispatchQueue.main.asyncを外してみても変わらずエラーが出てきてしまいます。 それからdataTaskに関してですが補完に表示される内容が下記の4つです。 手書きでもdataTask(with: URLRequest) { (Data?, URLResponse?, Error?) inこちらを記載しましたが変わらずエラーが出ます。 .dataTask(with: URLRequest, completionHandler: (Data?, URLResponse?, Error?) -> Void) .dataTask(with: URL, completionHandler: (Data?, URLResponse?, Error?) -> Void) .dataTask(with: URLRequest) .dataTask(with: URL)
quwant

2021/05/28 02:22 編集

参照サイトを追記しました。リンク1の追記部分に「無視しても致命的でない」とあるのでやはりdataTaskの使い方が違うようですね。
quwant

2021/05/28 08:12

解決しました。今までご対応いただきありがとうございました。
guest

回答1

0

自己解決

解決しました。

結論、addValue()ではなくallHTTPHeaderFieldsを使うことで解決しました。
ただ、なぜこれならレスポンスを受けられるのかは分かっていないので根本的な解決にはなっていないです。
<修正前>reqestUrl.addValue(key, forHTTPHeaderField: value)
<修正後>reqestUrl.allHTTPHeaderFields = [key: value]

swift

1class SendReqest { 2 func post(_ methodType: String, _ urlString: String, _ headers: Dictionary<String, String>){ 3 let url: URL = URL(string: urlString)! 4 var reqestUrl = URLRequest(url: url) 5 6 reqestUrl.httpMethod = methodType 7 8 for (key, value) in headers.reversed(){ 9 reqestUrl.allHTTPHeaderFields = [key: value] 10 } 11 12 URLSession.shared.dataTask(with: reqestUrl) { data, response, error in 13 if (error == nil) { 14 guard let _data = data else { 15 print("SendReqest guard") 16 return 17 } 18 if let result = String(data: _data, encoding: .utf8) { 19 do{ 20 let jsonObject = try JSONSerialization.jsonObject(with: _data, options: []) 21 } catch let err { 22 print("err >>> (err)") 23 } 24 } 25 } else { 26 let statusCode = (response as! HTTPURLResponse).statusCode 27 print("StatusCode >>> (statusCode)") 28 print("Error >>> (String(describing: error))") 29 } 30 }.resume() 31 } 32} 33

投稿2021/05/28 08:10

quwant

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問