2017-02-14 75 views
1

我有一段簡單的代碼,用於在下面工作。在Alamofire 4中調試HTTP POST的正確方法; HTTP POST不起作用

let params: Parameters! = ["xmldata": self.makeXML(), "reference": self.questionnaire!.jobRef!] 

Alamofire.request(url, method: .post, parameters: params, encoding: URLEncoding.default) 
       .validate() 
       .responseString { response in 
        print("Success: \(response.result)") 
        print("Response: \(response.response)") 
        print("Request: \(response.request)") 
        print("Error: \(response.error)") 
        // print("Response String: \(response.result.value)") 
       } 

代碼假設請求http post到下面的一個簡單的web表單。

<form action="/submit?textarea=1" method="post" enctype="multipart/form-data"> 
     <p>Paste XML data here.</p> 

     <input id="id_reference" maxlength="50" name="reference" type="text" placeholder="Reference.." /><br> 
     <textarea id="id_xmldata" maxlength="5000" name="xmldata" rows="10" cols="80"></textarea> 

     <br> 
     <input type="submit" 
      name="textarea_post_form" 
      value="Send" /> 
     </form> 

該代碼應該將2個字符串作爲參數發佈到網站上的表單並將數據插入數據庫。它曾經與Alamofire 3和Swift 2一起工作,但不是不再與AlamoFire 4和Swift 3一起工作。現在我不知道爲什麼它沒有工作,並且不知道我應該開始調試,因爲我找不到一種方法來查看是否發送了正確的數據,或者服務器端是否存在錯誤。

有沒有辦法解決這個問題或者可能跟蹤錯誤?

我從打印語句有什麼似乎並沒有任何錯誤...

Success: SUCCESS 
[Timeline]: Timeline: { "Request Start Time": 508807148.851, "Initial Response Time": 508807148.948, "Request Completed Time": 508807148.949, "Serialization Completed Time": 508807148.950, "Latency": 0.098 secs, "Request Duration": 0.099 secs, "Serialization Duration": 0.000 secs, "Total Duration": 0.099 secs } 
Response: Optional(<NSHTTPURLResponse: 0x600000225520> { URL: http://philips-survey.in.th/submit?textarea=1 } { status code: 200, headers { 
    Connection = "Keep-Alive"; 
    "Content-Encoding" = gzip; 
    "Content-Type" = "text/html; charset=utf-8"; 
    Date = "Tue, 14 Feb 2017 23:18:59 GMT"; 
    "Keep-Alive" = "timeout=5, max=100"; 
    Server = "Apache/2.4.10 (Debian)"; 
    "Transfer-Encoding" = Identity; 
    Vary = "Cookie,Accept-Encoding"; 
    "X-Frame-Options" = SAMEORIGIN; 
} }) 
Request: Optional(http://xxxx.com/submit?textarea=1) 
Error: nil 
+0

該響應有一個200狀態碼,它應該工作。錯誤發生在服務器端嗎? –

+0

嘗試將'validate()'更改爲'validate(statusCode:200 .. <600)'爲什麼?我不知道,它爲我工作。 –

+0

@JuanCurti響應應該是302.表單提交後,頁面應該重定向到另一個頁面... – Kann

回答

0

您是否嘗試過使用上傳multipartFormData與Alamofire?這樣的事情: Network.CustomManager.upload(.POST, postEndpoint, headers: headers, multipartFormData: { multipartFormData in ...