2016-08-11 3 views
3

Я пытаюсь сделать почтовый вызов на сервер, и я получаю код состояния 500. Я пробовал как отправлять сериализованный json-объект, так и закодированную строку с параметрами. У меня нет доступа к серверу, поэтому я не знаю, проблема с сервером, но вызовы GET и DELETE работают. POST и PUT нет. Вот код:Оператор Swift POST возвращает 500 код состояния

guard let urlComponents = NSURLComponents(string: url) else 
    { 
     print("error creating URL") 
     return (nil, nil) 
    } 

    for (key, value) in urlParameters 
    { 
     urlComponents.queryItems = [NSURLQueryItem(name:key, value:value)] 
    } 

    let urlRequest = NSMutableURLRequest(URL: urlComponents.URL!) 
    urlRequest.HTTPMethod = "POST" 
    let config = NSURLSessionConfiguration.defaultSessionConfiguration() 
    let session = NSURLSession(configuration: config) 

    do 
    { 
     let jsonUser = try NSJSONSerialization.dataWithJSONObject(["firstname": "Bob", "lastname": "Johnson", "summary": "Hi"], options: []) 
     urlRequest.HTTPBody = jsonUser 
    } 
    catch 
    { 
     print("Error: cannot create JSON from user") 
    } 
    let task = session.dataTaskWithRequest(urlRequest) 
    { 
    (data, response, error) in 
    .... 

Я также попытался установить httpbody так:

let postString = "firstname=Jack&lastname=Daniels&summary=hello" 

    urlRequest.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 

Это ответ сервера я получаю:

response: <NSHTTPURLResponse: 0x7ff3137a3b70> { URL: https://somelink } { status code: 500, headers { 
Connection = "keep-alive"; 
"Content-Length" = 1477; 
"Content-Type" = "text/html; charset=utf-8"; 
Date = "Thu, 11 Aug 2016 00:42:52 GMT"; 
Server = "WEBrick/1.3.1 (Ruby/2.2.4/2015-12-16)"; 
Via = "1.1 vegur"; 
"X-Request-Id" = "4c414334-4412-48a4-a61f-c17658182bdf"; 
"X-Runtime" = "0.007021"; 
} } 

Является ли это проблемой с моим POST-запрос или сервер?

+0

Похоже, на сервере имеется необработанная ошибка. – Harsh

ответ

3

Похоже, что проблема была реакция не была отформатирована как сервер пытался его прочитать. Поэтому, если у кого-то еще есть эта проблема, дважды проверьте свой сервер (в моем случае я должен был отправить сообщение кому-то и получить правильный формат).

2

500 - внутренняя ошибка сервера. Невозможно узнать от клиента, почему он это возвращает. Вам нужно поговорить с кем-то, кто запускает сервер.

Единственное, что я вижу, что вы, возможно, это неверно:

for (key, value) in urlParameters 
{ 
    urlComponents.queryItems = [NSURLQueryItem(name:key, value:value)] 
} 

Это, вероятно, следует это:

urlComponents.queryItems = [] 
for (key, value) in urlParameters 
{ 
    urlComponents.queryItems?.append(NSURLQueryItem(name:key, value:value)) 
} 
+0

Спасибо, что указали это, но причина, по которой он по-прежнему работает, заключается в том, что в urlParameters есть только одно значение, которое я тестирую. Но спасибо за это, я исправлю это сразу, чтобы у меня не было проблем в будущем. – Minimi