我已经为“ PUT”请求实现了以下代码:
var request: NSMutableURLRequest
let url:URL = URL(string: NetworkCallSDK.sharedSingleton().urlString! as String)!
request = NSMutableURLRequest(url: (url as URL) as URL)
print("getRequestHeaderWithAllParams:\(url)")
let parameter = ["key":"STRING"] as NSDictionary
let body = NSMutableData()
let boundary = "Boundary-\(UUID().uuidString)"
//define the multipart request type
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
for (key, value) in parameter
{
body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
body.append("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n".data(using: String.Encoding.utf8)!)
body.append("\(value)\r\n".data(using: String.Encoding.utf8)!)
}
body.append("--\(boundary)--\r\n".data(using: String.Encoding.utf8)!)
request.httpMethod = "PUT"
request.httpBody = body as Data
request.timeoutInterval = 120
return request
我正在从服务器获得500个状态。同样的API在Android中也可以正常工作。但是相同的POST方法代码对我来说很好用。
最佳答案
服务器因内部服务器错误而发生故障,该错误通常表示崩溃或POST数据格式不正确。您在这里有两个问题:
您缺少每个请求部分的Content-Type字段,这是必需的。您可能应该添加以下内容:
Content-Type: application/octet-stream
这可能是500错误的原因。
几乎可以肯定,您的数据blob将会显示(NULL)或一个空字符串,除非您在此代码外使用base64(或类似代码)对其进行了预编码。
然后发送原始数据。否则,您的服务器将无法获取数据。为此,您需要执行以下操作:
为您的身体使用NSData对象而不是NSString对象。
在任何附加字符串的地方,都可以使用
dataUsingEncoding:
方法将其转换为NSData对象。对于您的身体数据,请附加实际的NSData对象,而不是将其转换为字符串。
之后分别附加'\ r \ n'和分隔符。
如果您的服务器要求数据进行base64编码,请先调用
base64EncodedDataWithOptions:
将NSData转换为字符串。无论哪种方式,您都应该将主体构造为NSData对象。关于ios - PUT请求在Swift 3中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44668823/