我已经为“ 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/

10-14 20:48