2017-09-12 23 views
1

私は単純な文字列を投稿しようとしていますが、HTTP 415サポートされていないメディアタイプエラーが発生しています。私はまだそれが動作しなかったJSONにパラメータを変換しようとしました。statusCodeは200である必要がありますが、415

方法更新

func requestUsingPostMethod(url: String, parameter: String, completion: @escaping (_ success: [String : AnyObject]) -> Void) { 

    //@escaping...If a closure is passed as an argument to a function and it is invoked after the function returns, the closure is @escaping. 

    var request = URLRequest(url: URL(string: url)!) 
    request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
    request.addValue("application/json", forHTTPHeaderField: "Accept") 
    request.httpMethod = "POST" 
    let postString = parameter 


    request.httpBody = try? JSONSerialization.data(withJSONObject: [postString]) 
     // request.httpBody = postString.data(using: .utf8) 
    let task = URLSession.shared.dataTask(with: request) { Data, response, error in 

     guard let data = Data, error == nil else { // check for fundamental networking error 

      print("error=\(String(describing: error))") 
      return 
     } 

     if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors 

      print("statusCode should be 200, but is \(httpStatus.statusCode)") 
      print(response!) 
      return 

     } 

     let responseString = try! JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String : AnyObject] 
     completion(responseString) 


    } 

    task.resume() 

} 

要求

NetworkCall().requestUsingPostMethod(url: "http://192.168.50.119:8181/rest/items/wemo_lamp_switch", parameter: "ON", completion: { response in 

      print("--------------------------------------------------------------") 
      print(response) 
      // let jsonResults = JSON(String: response) 
     }) 

ERROR

からstatusCodeは200でなければなりませんが、415 {URLは次のようになります。 http://192.168.50.119:8181/rest/items/wemo_lamp_switch} {ステータス コード:415、ヘッダー{ "Content-Length" = 282; "Content-Type" = "application/json"; 日付= "火、12月2017 08:33:16 GMT"; サーバー= "Jetty(9.2.19.v20160908)"; }}

私はあなたの答えで質問を更新しましたが、同じエラーが発生しました。

ポストマンデータ

{ 
    "id": "6f5d4f8a-612a-10f9-71b5-6dc8ba668885", 
    "name": "simpledata", 
    "description": "", 
    "order": [ 
     "65df8736-1069-b0f0-3a1d-c318ce1810e0" 
    ], 
    "folders": [], 
    "folders_order": [], 
    "timestamp": 1505208950131, 
    "owner": 0, 
    "public": false, 
    "requests": [ 
     { 
      "id": "65df8736-1069-b0f0-3a1d-c318ce1810e0", 
      "headers": "", 
      "headerData": [], 
      "url": "http://192.168.50.119:8181/rest/items/wemo_lamp_switch", 
      "queryParams": [], 
      "pathVariables": {}, 
      "pathVariableData": [], 
      "preRequestScript": null, 
      "method": "POST", 
      "collectionId": "6f5d4f8a-612a-10f9-71b5-6dc8ba668885", 
      "data": [], 
      "dataMode": "raw", 
      "name": "http://192.168.50.119:8181/rest/items/wemo_lamp_switch", 
      "description": "", 
      "descriptionFormat": "html", 
      "time": 1505208951279, 
      "version": 2, 
      "responses": [], 
      "tests": null, 
      "currentHelper": "normal", 
      "helperAttributes": {}, 
      "rawModeData": "OFF" 
     } 
    ] 
} 
+2

415は「サポートされていないメディアタイプ」です。 accept-content-typeを 'application/json 'に'要求'する必要がありますか? – Larme

+1

JSON – CZ54

答えて

0

あなたのAPIが返すことを期待するものは何でもあなたの要求のContent-Typeヘッダーを設定します。あなたはそれがJSON、その後

request.allHTTPHeaderFields["Content-Type"] = "application/json" 
+0

hy tnxを待っているWSにStringを送信しています。それを加えても。同じエラーが発生しています。 –

3
request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
request.addValue("application/json", forHTTPHeaderField: "Accept") 

また

let theparam = JSONSerialization.data(withJSONObject: parameter) 
あなたがAPIにJSONの代わりにUTF8エンコードされた文字列を送信している
+0

hy tnx。それを加えても。同じエラーが発生しています。 –

+0

@ "application/json; charset = UTF-8"エンコーディングを追加してみてください – ovidiur

0

、それ故にHTTPエラー415が返されることを確信している場合単純なStringはJSONに変換できません。配列または辞書の一部である必要があるため、APIが期待する実際のフォーマットを把握する必要があります。

request.httpBody = try? JSONSerialization.data(withJSONObject: [postString])

また、あなたのHTTPヘッダにContent-Typeヘッダを追加する必要があります。

request.allHTTPHeaderFields["Content-Type"] = "application/json"

+0

hy tnx。それを加えても。同じエラーが発生しています。 –

+0

実際に他のプラットフォームからAPIを利用できるようになったことはありますか?まず、テストプラットフォーム(Postmanなど)からリクエストを行い、質問に作業リクエストを含める必要があります。実際には、あなたのAPIがどんなフォーマットを予期しているかは実際には分かりません。 –

+0

@ David.tnx。私は生データとして郵便配達員と一緒に試みました。それはうまく動作します。私の質問を郵便配達員のデータで更新しました。確認してください。 –

関連する問題