2016-05-07 51 views
-1

我在POST查询中遇到了一些问题;请帮忙。它总是向我发送一个400错误的请求响应。我已经彻底检查了一切,但它只是没有工作。请帮忙。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

显示什么被发送,哪些服务器期望 – Wain

+0

你发送JSON请求。你确定服务器期待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来告诉它您正在做这件事。 (另外,由于他正在创建JSON请求,所以OP的Web服务是否期待多部分请求并不十分清楚。)另外,您不必为此设置“Content-Length”。 – Rob