2016-08-11 4 views
3

私はサーバーへのポストコールをしようとしていますが、ステータスコードは500です。私は、シリアル化されたjsonオブジェクトとパラメータを持つエンコードされた文字列の両方を送信しようとしました。私はサーバーにアクセスできないので、サーバーに問題があるかどうかわかりませんが、GETおよびDELETE呼び出しが機能します。 POSTとPUTは行いません。ここでは、コードです:スウィフト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を設定しようとしました:

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"; 
} } 

これは私の問題です:

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

    urlRequest.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 

これは私が取得、サーバーの応答があります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には1つの値しかないということです。しかし、私はすぐにこれを修正して、将来私が問題を起こさないようにしてくれてありがとう。 – Minimi

関連する問題