2016-05-18 2 views
1

自己署名証明書を使用して開発サーバーにHTTP POSTリクエストを作成しようとしています。iOS9 + Swift:JSON値を使用した投稿リクエストの本文を設定するには?

enter image description here

func makeHTTPPostRequest(path: String, body: JSON, onCompletion: (JSON?, NSError?) -> Void) { 

    let request = NSMutableURLRequest(URL: NSURL(string: path)!) 
    request.HTTPMethod = "POST" 

    // I am using SwiftyJSON 
    do { 
     request.HTTPBody = try body.rawData() 
    } catch _ { } 

    let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() 
    let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue:NSOperationQueue.mainQueue()) 

    let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in 
     var json: JSON? 
     if let _data = data { 
      json = JSON(data: _data) 
     } 
     onCompletion(json, error) 
    }) 
    task.resume() 
} 

私はPOSTリクエストを行い、サーバは私がきちんと要求のHTTPBodyを設定しているにもかかわらず、私の「空のフィールド」エラーを返します。これは、POSTの呼び出しを行う機能であります

PS:私が郵便配達所から電話すると、そのルートはうまく動作しています。

+1

あなたのコードブロックからは、JSONデータを送信しようとしています。 'NSJSONSerialization.dataWithJSONObject'を使用してJSONをデータに変換してください。 –

+0

SwiftyJSONでは、' JSON 'は構造体です。 AnyObjectが必要なのでこのメソッドを使用することはできません。しかし、JSON.rawData()メソッドは適切なデータオブジェクトを返しています。結果をデコードしてテストしました。 –

+1

'rawData'が返すものは不明ですが、' request.HTTPBody'プロパティは 'NSData'オブジェクトでなければなりません。 JSONの場合、データオブジェクトにはJSON(シリアル化されたJSON表現)のUnicode文字列(UTF-8が好ましい)が含まれている必要があります。それに応じて 'Content-Type'ヘッダも設定するべきです(' application/json')。 – CouchDeveloper

答えて

1

request.HTTPBodyプロパティは、NSDataオブジェクトである必要があります。 JSONを送信する場合、データオブジェクトには、シリアル化されたJSON表現であるUnicode文字列(UTF-8が好ましい)が含まれている必要があります。

さらに、application/jsonに合わせてContent-Typeヘッダーを設定する必要があります。

関連する問題