我正在尝试发布一个简单的字符串,但是我不断收到HTTP 415不支持的媒体类型错误。我尝试将参数转换为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,标题{
“内容长度” = 282;
“Content-Type” =“应用程序/ json”;
日期=“星期二,2017年9月12日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"
}
]
}
最佳答案
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
也
let theparam = JSONSerialization.data(withJSONObject: parameter)
关于ios - statusCode应该为200,但为415,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46171719/