2016-12-27 3 views
3

Я использую Swift 3 и Alamofire 4.0.Почтовый метод запроса Alamofire

Я хочу создать аналогичный запрос Alamofire POST как запрос Почтальон, показанный на скриншоте:

enter image description here

Я попытался с этими строками кода:

var parameters: [String: Any] = [ 
    "client_id" : "xxxxxx", 
    "client_secret" : "xxxxx", 
    "device_token" : "xxxx", 
    "fullname" : "xxxxx", 
    "gender": "xxx" 
] 

Alamofire.request(url, method: .post, parameters: parameters).responseJSON { response in 
print(response) 
} 

Но я получил эту ошибку :

enter image description here

Как реализовать запрос POST с телом как данные формы с использованием Alamofire в Swift 3?

+1

У вас возникли проблемы с сериализацией ответа. Это в формате JSON? –

+0

Глядя на ошибку, это означает, что * response * не является допустимым JSON, попробуйте сначала просмотреть ответ. (например, использовать Charles) –

+0

http://stackoverflow.com/questions/31982513/how-to-send-a-post-request-with-body-in-swift –

ответ

0
  • Swift 3.0 - Alamofire - Работающий код для многочастных загрузок данных формы *

// Параметры

let params: [String : String] = 
    ["UserId" : "\(userID)", 
    "FirstName" : firstNameTF.text!, 
    "LastName" : lastNameTF.text!, 
    "Email"  : emailTF.text! 
    ] 

// И загрузить

Alamofire.upload(
     multipartFormData: { multipartFormData in 

      for (key, value) in params 
      { 
        multipartFormData.append((value.data(using: .utf8))!, withName: key) 
      } 
    }, 
     to: url, 
     encodingCompletion: { encodingResult in 
      switch encodingResult { 
      case .success(let upload, _, _): 
       upload.responseJSON { response in 
        debugPrint(response) 

       } 
       upload.uploadProgress(queue: DispatchQueue(label: "uploadQueue"), closure: { (progress) in 


       }) 

      case .failure(let encodingError): 
       print(encodingError) 
      } 
    } 
    ) 

Сообщите мне, если у вас все еще есть проблемы с ним.

+0

Я новичок в программировании Swift. Что означает 'completehandler()'? У меня возникла ошибка: «Использование неразрешенного идентификатора« handhandler », но исходный код хорошо работает после его удаления, и я получил ответ JSON с сервера. – user1994

+0

Удалить все завершающие строки из кода –

+0

Что это такое? Это ваш код в вашем проекте? : D – user1994

0

после слишком много попробовать, я так преуспел попробовать этот

override func viewDidLoad() { 
     super.viewDidLoad() 


     let parameters: Parameters = ["client_id": "1","user_token":"xxxxxxxx"] 
       // Do any additional setup after loading the view, typically from a nib. 
     let url = "http://xxxxxxxxxxx/index.php/Web_api/get_client_profile" 
     //let timeParameter = self.getLastTimeStamp() 
     self.request = Alamofire.request(url, method: .post, parameters:parameters) 
     if let request = request as? DataRequest { 
      request.responseString { response in 
       //PKHUD.sharedHUD.hide() 
       do{ 
        let dictionary = try JSONSerialization.jsonObject(with: response.data!, options: JSONSerialization.ReadingOptions.allowFragments) as! NSDictionary 
        print(dictionary) 

       }catch{ 

       } 
      } 
     } 
    } 

    var request: Alamofire.Request? { 
     didSet { 
      //oldValue?.cancel() 
     } 
    } 
0

Вы можете отправить заявку, используя Alamofire.

0

О чем беспокоиться. Метод запроса Alamofire не так сильно изменился (для Swift 3.0), если вы знаете, как это сделать в Swift 2.0/2.2. Если вы понимаете старый метод, тогда вы также можете легко понять это. Теперь давайте подробнее рассмотрим на следующем шаблонный -

Alamofire.request(apiToHit, method: .post, parameters: parametersObject, encoding: JSONEncoding.default, headers: headerForApi).responseJSON { response in switch response.result{ 

    case .success(_): 
     if let receivedData: Any = response.result.value{ 
      if let statusCode: Int = response.response?.statusCode { 
       //Got the status code and data. Do your data pursing task from here. 
      } 
     }else{ 
      //Response data is not valid, So do some other calculations here 
     } 
    case .failure(_): 
      //Api request process failed. Check for errors here. 
    } 

Теперь здесь, в моем случае -

  1. apiToHit // Ваш апи URL Строка

  2. .post// Метод запроса. Вы можете изменить этот метод, согласно вам нужно как .POST, .get, .Put, .delete и т.д.

  3. parametersObject // Параметры, необходимые для данного API. То же самое, если вы отправляете «тело» на почтальон и т. Д. Помните, что эти параметры должны быть в форме [String: Any]. Если вам это не нужно, вы можете просто пройти nil.

  4. JSONEncoding.default // Это процесс кодирования. В моем случае я устанавливаю это как .default, который ожидается здесь. Вы также можете изменить это на .prettyPrinted, если вам нужно.

  5. headerForApi // Это заголовок, который вы хотите отправить, когда вы запрашиваете api. В моем случае это в формате [String: String]. Если вам это не нужно, вы можете просто пройти nil.

  6. .responseJSON // Ожидание ответа как в формате JSON. Вы также можете изменить это, как вам нужно.

Теперь в моей просьбе я использую переключатель внутри закрытия запроса, чтобы проверить результат, как response in switch response.result{.

case .success(_): Внутри случай я также проверка результатов данных и кода http состояния, а как этот

if let receivedData: Any = response.result.value{ 
    if let statusCode: Int = response.response?.statusCode { 
} 
} 

Надеется, что это помогло. Благодарю.