statusCode应为200,但为415

时间:2017-09-12 08:40:04

标签: ios iphone swift http http-status-code-415

我正在尝试发布一个简单的字符串,但我不断收到HTTP 415 Unsupported Media Type Error。我尝试将参数转换为JSON,但它还没有工作。

方法已更新

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)
        })

错误

  

statusCode应为200,但是为415 {URL:   http://192.168.50.119:8181/rest/items/wemo_lamp_switch} {状态   代码:415,headers {       " Content-Length的" = 282;       "内容类型" =" application / json&#34 ;;       日期="周二,2017年9月12日08:33:16 GMT&#34 ;;       Server =" Jetty(9.2.19.v20160908)&#34 ;; }}

我用你的答案更新了问题,但仍然收到同样的错误。

邮递员数据

{
    "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"
        }
    ]
}

3 个答案:

答案 0 :(得分:3)

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

另外

let theparam = JSONSerialization.data(withJSONObject: parameter)

答案 1 :(得分:0)

将您的请求Content-Type标头设置为您希望API返回的任何内容。如果您确定它返回JSON,那么

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

答案 2 :(得分:0)

您正在向API发送UTF8编码的String而不是JSON,因此HTTP错误415.但是,一个简单的String无法转换为JSON,它需要是数组或字典的一部分,所以你需要找出你期望的API的实际格式。

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

您可能还需要将Content-Type标头添加到HTTP标头中。

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