2017-05-03 11 views
0

빠른 네트워크 요청을 위해 Moya를 사용하고 있습니다.Moya의 응답 헤더 받기

요청을 받고 Moya- Object Mapper를 사용하여 결과를 매핑 할 수 있습니다.

나는 이전에 alamofire를 사용했으며 게시물을 만들고, 요청을 받고 응답 헤더를 읽는 방법에 익숙했습니다.

그러나 모야에서 어떻게 할 수 있는지 이해할 수 없습니다.

설명서를 읽었지만 응답 헤더를 읽는 것에 대해 아무런 언급도하지 않았습니다.

HTTP 인증을 수행하고 응답 헤더를 읽는 방법을 따라 할 수있는 예제 또는 자습서가 있습니까? 또한 게시 요청을 만들고 필드 매개 변수 또는 json 본문으로 매개 변수를 보내는 방법에 대해서도 설명합니다.

나는 이미 모야 예를 거쳤습니다.

도움이 될 것입니다. 고맙습니다.

답변

1

모야의 응답 헤더는 사실 매우 어렵습니다. Moya 코드에서 원치 않는 오래된 다운 캐스트입니다. 왜 그들이 그것을 내렸는 지 나는 결코 알지 못한다. 이것은 내가 액세스를 얻기 위해 응답을 forcecast 내 개인 코드의 예입니다 Moya header PR

: 풀 요청에 약간의 변화 덕분에 Moya header

을 그리고 수행

나는 그것을 지적하는 관련 문제를 열었다 헤더에 :

class GetTokenRequest { 

    private let requestService = AuthorizedRequest() 

    func request() -> Observable<AuthorizedResult<GetTokenEntityResult>> { 
     return Observable.deferred { [weak self] in 
      guard let wself = self else { 
       return Observable.empty() 
      } 

      let req = wself.requestService.makeRawRequest { userId in 
        let obj = GetTokenEntity(lang: currentLanguage(), userId: userId) 
        return MtxAPI.getToken(obj) 
       } 
       .shareReplay(1) 

      return req.map { result in 
       switch result { 
       case .success(let response): 
        let urlResponse = response.response as! HTTPURLResponse 
        guard let token = urlResponse.allHeaderFields["Token"] as? String else { 
         return AuthorizedResult.fail(RequestError.technical) 
        } 
        return AuthorizedResult.success(GetTokenEntityResult(token: token)) 

       case .fail(let error): return AuthorizedResult.fail(error) 
       } 
      } 
     } 
    } 

} 

내가 RxSwift하지만 메인 라인을 사용하고 있습니다 :

let urlResponse = response.response as! HTTPURLResponse 

당신은 당신의지도에 그것을 forcecast 수/mapObject/mapArray 당신이 응답을 얻을 때 사용이다 (이는 Moya.Response)

내가 만든 문제를 따르도록 당신에게 제안

,이 구현 될 때 알을 이 breaking change

보너스를 포함 할 다음 릴리즈 : 프로젝트에서 SwiftLint를 사용하는 경우, 당신은 guard/let

guard let resp = response.response as? HTTPURLResponse 
+0

으로 캐스팅 할 수 있습니다 감사합니다! 추가 한 후에 응답 헤더를 가져올 수 있습니다. urlResponse = response.response as! HTTPURL 응답 –