https://labs.goo.ne.jp/api/jp/hiragana-translation/リンク先のAPIに対してPostを行いたいと考えているのですが、エラーコードが帰ってきてしまいます。
コード
上記2つのサイトを参考にPOSTの処理を試してみました。
Swift
1override func viewDidLoad() { 2 super.viewDidLoad() 3 let url = URL(string: "https://labs.goo.ne.jp/api/hiragana") 4 var request = URLRequest(url: url!) 5 request.httpMethod = "POST" 6 request.addValue("application/json", forHTTPHeaderField: "Content-Type") 7 8 let params: [String: Any] = [ 9 "app_id": "作成したapp_id", 10 "request_id": "", "sentence": "焼き芋", 11 "output_type": "hiragana" 12 ] 13 14 do { 15 request.httpBody = try JSONSerialization.data(withJSONObject: params, options: .prettyPrinted) 16 let task:URLSessionDataTask = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: {(data,response,error) -> Void in 17 let resultData = String(data: data!, encoding: .utf8)! 18 print("result:(resultData)") 19 print("response:(response)") 20 }) 21 task.resume() 22 } catch { 23 print("Error:(error)") 24 } 25 }
通信自体はできていそうなのですが、printしているdataの中身を見るとエラーコードが帰ってきているようでした。
ログ
コンソールのログは以下の様に表示されます
result:{"error_code": -1} response:Optional(<NSHTTPURLResponse: 0x280d10600> { URL: https://labs.goo.ne.jp/api/hiragana } { Status Code: 400, Headers { "Content-Length" = ( 18 ); "Content-Type" = ( "application/json; charset=UTF-8" ); Date = ( "Mon, 24 Jun 2019 07:52:09 GMT" ); P3P = ( "policyref=\"/w3c/p3p.xml\",CP=\"CAO DSP COR CURa ADMa DEVa TAIa PSAa PSDa IVAi IVDi CONo OUR SAMo OTRo IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA HEA PRE LOC\"" ); "Set-Cookie" = ( "BIGipServerpool-labs-10-2=121902252.20480.0000; path=/; Httponly; Secure", z "TS019127ff=0122c0d7568a528128b5cbc18a059c3de65549546b5e4e4ab05960f1736a72e4f9ea16d828b26345fb2b59c0b617cb4abed40454be27f9bd990125b068de0eacb03dbd61ff; Path=/" ); "X-Cnection" = ( close ); "X-Content-Type-Options" = ( nosniff ); } })
APIにPOSTを行った経験がないので何が悪いのか検討がつかず困っています。何が間違っているのでしょうか?
追記
公式ドキュメントを読んで以下の様なコードに書き換えてみたのですがserver errorの部分に入ってしまいます。
Swift
1override func viewDidLoad() { 2 super.viewDidLoad() 3 let url = URL(string: "https://labs.goo.ne.jp/api/hiragana") 4 var request = URLRequest(url: url!) 5 request.httpMethod = "POST" 6 7 request.addValue("application/json", forHTTPHeaderField: "Content-Type") 8 request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 9 10 let postData = PostData(app_id: "作成したapp_id", request_id: "", sentence: "焼き芋", output_type: "hiragana") 11 12 13 guard let uploadData = try? JSONEncoder().encode(postData) else { 14 return 15 } 16 request.httpBody = uploadData 17 18 let task = URLSession.shared.uploadTask(with: request, from: uploadData) { data, response, error in 19 if let error = error { 20 print ("error: (error)") 21 return 22 } 23 24 guard let response = response as? HTTPURLResponse, 25 (200...299).contains(response.statusCode) else { 26 print ("server error") 27 return 28 } 29 if let mimeType = response.mimeType, 30 mimeType == "application/json", 31 let data = data, 32 let dataString = String(data: data, encoding: .utf8) { 33 print ("got data: (dataString)") 34 } 35 } 36 task.resume() 37 } 38}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/25 01:09
2019/06/25 01:50