2015-09-17 2 views
1

Я попытался отправить тело запроса PUT, но данные не получены на внутреннем интерфейсеОтправить тело запроса PUT в быстрой

let request = NSMutableURLRequest(URL: url!) 
request.HTTPMethod = "PUT" 
let putBody = "bucket=\(bucket)&day=\(day)" 
request.HTTPBody = putBody.dataUsingEncoding(NSUTF8StringEncoding) 
let task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: {(data, response, error) -> Void in 
     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      completion(data: data, response: response as! NSHTTPURLResponse, error: error) 
     }) 
    }) 
task.resume() 

Значение bucket (Int) является 2015040 и day (String) является day27. Я попытался сделать тот же запрос в Postman, сервер получил данные тела, так что с сервером ничего не случилось.

Есть ли другой способ установить тело запроса?

EDIT:

Это отлично работает, если я изменю метод запроса к POST в моей просьбе и сервера, а также. Итак, вопрос сводится к тому, как установить тело в запросе PUT?

+0

Вы уверены, что не получили запрос (материал после '?' В URL-адресе) и тело перепуталось? Для меня ваш 'putBody' выглядит так, как обычно передается как запрос ... – Roshan

+0

Что ожидает сервер? Кстати, вы должны использовать [NSURLQueryItem] (https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLQueryItem_Class/). – jtbandes

+0

сервер ожидает ведро и день в теле запроса. – crysis

ответ

1

Я только что имел дело с этим. Имел ту же самую проблему, когда он работал отлично с POST, но не с запросами PUT или PATCH. Похоже, что для запросов PUT и PATCH Swift привлекателен для заголовка Content-Type.

Так попробуйте добавить следующее:

request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 

Это будет работать до тех пор, как ваше тело URL стиль, так как это:

key=value&key=value&key=value 

Для тех, кто использует JSON, просто использовать приложение/json вместо Content-Type.

Смежные вопросы