2016-05-07 14 views
-1

POSTクエリで問題が発生しました。助けてください。それは常に私に400 Bad Requestレスポンスを送ります。私はすべてを徹底的にチェックしたが、うまく機能していない。助けてください。Swift POSTクエリの問題

コードがある -

struct RegisterService { 

var authToken: String = "" 
var baseURL = NSURL(string: "") 

func getToken(name: String, email: String, password: String, cfmpassword: String, completion: (AuthToken? -> Void)) { 

    let request = NSMutableURLRequest(URL: baseURL!) 
    let session = NSURLSession.sharedSession() 
    request.HTTPMethod = "POST" 

    let params = ["accept":"on", "cfmpassword":"\(cfmpassword)", 
     "email":"\(email)", "name":"\(name)", "password":"\(password)"] 
     as Dictionary<String, AnyObject> 

    do { 
     request.HTTPBody = try NSJSONSerialization.dataWithJSONObject(params, options: []) 
     request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
     request.addValue("application/json", forHTTPHeaderField: "Accept") 
    } catch { 
     print("Request Unsuccessful") 
    } 

    let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in 

     print(request) 
     print(data) 
     print(response) 
     if let httpResponse = response as? NSHTTPURLResponse { 
      switch httpResponse.statusCode { 
      case 200: 
       // 2. Create JSON object with data 
       do { 
        let jsonDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [String: AnyObject] 
        let authToken = AuthToken(tokenDictionary: jsonDictionary!) 
        completion(authToken) 
       } catch { 
        print("Fetch failed: \((error as NSError).localizedDescription)") 
       } 
      default: 
       print("GET request not successful. HTTP status code: \(httpResponse.statusCode)") 
       NSOperationQueue.mainQueue().addOperationWithBlock { 
        completion(nil) 
       } 
      } 
     } else { 
      print("Error: Not a valid HTTP response") 
      NSOperationQueue.mainQueue().addOperationWithBlock { 
       completion(nil) 
      } 
     } 
    }) 

    task.resume() 
} 
} 
+1

が送信され、どのようなサーバはあなたがJSONリクエストを送っている – Wain

+0

期待しているものを表示します。サーバーがJSONリクエストを期待していますか? – Rob

+0

私はapplication/x-www-form-urlencoded形式でこれを送信しようとしましたが、動作しません。 –

答えて

0
let params = ["accept":"on", "cfmpassword":"\(cfmpassword)", "email":"\(email)", "name":"\(name)", "password":"\(password)"] as Dictionary<String, AnyObject> 

let boundary:String = "---------------------------14737809831466499882746641449" 

let body:NSMutableData = NSMutableData() 

if params != nil 
{ 
     for (key, value) in params! 
     { 
      body.appendString("--\(boundary)\r\n") 
      body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n") 
      body.appendString("\(value)\r\n") 
     } 
} 

body.appendString("--\(boundary)--\r\n") 
request.setValue("\(body.length)", forHTTPHeaderField:"Content-Length") 
request.HTTPBody = body 
+0

'multipart/formdata'リクエストの本体を作成していますが、ヘッダーの' Content-Type'を設定することはありません。 (また、OPのWebサービスがJSONリクエストを作成しているので、マルチパートリクエストを期待しているのかどうかはっきりしていません)また、あなたのために設定されているように、 'Content-Length'を設定する必要はありません。 – Rob