2016-12-27 3 views
6

Ich verwende Alamofire für die Durchführung aller Netzwerkanforderungen in meiner App. Ich habe Probleme beim Kodieren des Parameters als JSON in der get-Anfrage.Request Zeitüberschreitung bei Verwendung der Parametercodierung JSONEncoding.default

Nach meiner Anfrage:

Alamofire.request(url, method: .get, parameters: params, encoding: JSONEncoding.default) 
.responseJSON(completionHandler: { (response) in 
    switch response.result { 
    case .success(let retrivedResult): 
     print(retrivedResult) 
//   success(brandTags) 
     break 
    case .failure(let errorGiven): 
     print(errorGiven) 
     print(String(data: response.data!, encoding: String.Encoding.utf8) ?? "") 
     failure(APICaller.parseErrorAndGiveMessage(givenError: errorGiven as NSError)) 
     break 
    } 
}) 

Wenn ich die Parameter wie JSONEncoding.default wie oben kodieren, wobei die Anforderung immer mal aus mit folgenden in meinem Logs:

2016-12-27 12:22:41.425948 xyz[5140:133008] [] nw_endpoint_flow_service_writes [2.1 35.164.98.40:80 ready socket-flow (satisfied)] Write request has 4294967295 frame count, 0 byte count 
2016-12-27 12:23:41.485534 xyz[5140:133041] [] nw_endpoint_flow_service_writes [2.1 35.164.98.40:80 ready socket-flow (satisfied)] Write request has 4294967295 frame count, 0 byte count 

Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSUnderlyingError=0x60000024a9b0 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=http://xyz-beta.abc.com/v1/brands/1a1/notifications, NSErrorFailingURLKey=http://xyz-beta.abc.com/v1/brands/1a1/notifications, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2102, NSLocalizedDescription=The request timed out.} 
2016-12-27 12:23:41.488336 xyz[5140:133868] [] __tcp_connection_write_eof_block_invoke Write close callback received error: [89] Operation canceled 

Aber wenn ich den Parameter entfernen Kodierung wie unten, die Anfrage wird ordnungsgemäß ohne Probleme abgeschlossen.

Alamofire.request(url, method: .get, parameters: params, encoding: JSONEncoding.default) 
    .responseJSON(completionHandler: { (response) in 
     switch response.result { 
     case .success(let retrivedResult): 
      print(retrivedResult) 
    //   success(brandTags) 
      break 
     case .failure(let errorGiven): 
      print(errorGiven) 
      print(String(data: response.data!, encoding: String.Encoding.utf8) ?? "") 
      failure(APICaller.parseErrorAndGiveMessage(givenError: errorGiven as NSError)) 
      break 
     } 
    }) 

Was macht den Unterschied?

UPDATE:

öffnete ich dieses Problem mit Alamofire Gemeinschaft auf Github und this is their response. Hoffe, das hilft Menschen, die ähnliche Probleme hatten.

Antwort

3

So nach der Alamofire Gemeinschaft auf den issue ich auf GitHub für meine obige Frage geöffnet, sie deuten darauf hin, dass dies ein sehr häufiges Verhalten ist oft, und die Lösung zu sehen dies URLEncoding.queryString kodieren die Parameter in der GET Anfrage, da einig Server mögen nicht bodyData in GET Anfrage.

So wurde im Wesentlichen meine Anfrage Code wie folgt geändert:

Alamofire.request(url, method: .get, parameters: params, encoding: URLEncoding.queryString) 
.responseJSON(completionHandler: { (response) in 
    switch response.result { 
    case .success(let retrivedResult): 
     print(retrivedResult) 
//   success(brandTags) 
     break 
    case .failure(let errorGiven): 
     print(errorGiven) 
     print(String(data: response.data!, encoding: String.Encoding.utf8) ?? "") 
     failure(APICaller.parseErrorAndGiveMessage(givenError: errorGiven as NSError)) 
     break 
    } 
}) 

Und das ist für mich perfekt funktioniert.

+1

tnx. Du hast meine Zeit gerettet. –

0

ich gerade versucht habe und Erfolg:

Werfen Sie Ihren param als [String: AnyObject]

let params: [String: AnyObject] = ["param1": value1 as AnyObject, "param2": value2 as AnyObject] 

Hoffnung, das hilft.

+0

Danke für Ihre Antwort. Bitte beziehen Sie sich auf meine aktualisierte Frage für zukünftige Referenz. –

+0

Ja, ich werde überprüfen. Das gleiche Problem hier :) –

0

Ich habe mein Problem herausgefunden. In meinem Router hatte ich meine GET-Anfragen JSONEncoding mit:

urlRequest = versuchen JSONEncoding.default.encode (urlRequest, mit: Parameter)

es zu beheben, habe ich es zu urlencoding:

urlRequest = versuchen URLEncoding.default.encode (urlRequest, mit: Parameter)

Verwandte Themen