我正在尝试发布一个简单的字符串,但我不断收到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"
}
]
}
答案 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"