[ios] 문자 0 주변의 Alamofire 유효하지 않은 값

Alamofire.request(.GET, "url").authenticate(user: "", password: "").responseJSON() {
    (request, response, json, error) in
    println(error)
    println(json)

}

이것은 Alamofire에 대한 내 요청입니다. 특정 요청에 대해 언젠가 작동하지만 때로는 다음과 같은 메시지가 나타납니다.

Optional(Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x78e74b80 {NSDebugDescription=Invalid value around character 0.})

이것이 잘못된 JSON 때문일 수 있다는 것을 읽었지만 응답은 JSON 유효성 검사기에서 유효한 것으로 확인한 정적 json 문자열입니다. å ä ö 문자와 일부 HTML이 포함되어 있습니다.

가끔이 오류가 발생하는 이유는 무엇입니까?



답변

나도 같은 문제에 직면했습니다. responseString대신 시도했고 responseJSON작동했습니다. 나는 이것이 Alamofire함께 사용 하는 버그라고 생각합니다 django.


답변

Alamofire에서 멀티 파트 형식으로 이미지를 업로드하는 동안 동일한 오류가 발생했습니다.

multipartFormData.appendBodyPart(data: image1Data, name: "file")

나는 다음으로 대체하여 고쳤다.

multipartFormData.appendBodyPart(data: image1Data, name: "file", fileName: "myImage.png", mimeType: "image/png")

이것이 누군가를 돕기를 바랍니다.


답변

이것이 당신을 도울 수 있습니다

Alamofire.request(.GET, "YOUR_URL")
     .validate()
     .responseString { response in
         print("Success: \(response.result.isSuccess)")
         print("Response String: \(response.result.value)")
     }


답변

동일한 문제가 나에게 발생했으며 콘텐츠 유형이 설정되지 않았기 때문에 실제로 서버 문제가되었습니다.

첨가

.validate(contentType: ["application/json"])

요청 체인이 나를 위해 해결했습니다.

Alamofire.request(.GET, "url")
        .validate(contentType: ["application/json"])
        .authenticate(user: "", password: "")
        .responseJSON() { response in
            switch response.result {
            case .Success:
                print("It worked!")
                print(response.result.value)
            case .Failure(let error):
                print(error)
            }
        }


답변

제 경우에는 서버 URL이 잘못되었습니다. 서버 URL을 확인하세요 !!


답변

같은 오류가 발생했습니다. 그러나 나는 그것에 대한 해결책을 찾았습니다.

참고 1 : “Alarmofire 오류가 아닙니다.”, 서버 오류 때문입니다.

참고 2 : “responseJSON”을 “responseString”으로 변경할 필요가 없습니다.

public func fetchDataFromServerUsingXWWWFormUrlencoded(parameter:NSDictionary, completionHandler: @escaping (_ result:NSDictionary) -> Void) -> Void {

        let headers = ["Content-Type": "application/x-www-form-urlencoded"]
        let completeURL = "http://the_complete_url_here"
        Alamofire.request(completeURL, method: .post, parameters: (parameter as! Parameters), encoding: URLEncoding.default, headers: headers).responseJSON { response in

            if let JSON = response.result.value {
                print("JSON: \(JSON)") // your JSONResponse result
                completionHandler(JSON as! NSDictionary)
            }
            else {
                print(response.result.error!)
            }
        }
    }


답변

이것이 내가 잘못된 3840 오류를 해결하는 방법입니다.

오류 로그

 responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}))
  1. 그것은 함께 있었다 인코딩 유형 요청에 사용되는 인코딩 유형이 acceptedin해야 사용되는 서버 측 .

인코딩을 알기 위해서는 모든 인코딩 유형을 실행해야했습니다.

기본값 / methodDependent / queryString / httpBody

    let headers: HTTPHeaders = [
        "Authorization": "Info XXX",
        "Accept": "application/json",
        "Content-Type" :"application/json"
    ]

    let parameters:Parameters = [
        "items": [
                "item1" : value,
                "item2": value,
                "item3" : value
        ]
    ]

    Alamofire.request("URL",method: .post, parameters: parameters,encoding:URLEncoding.queryString, headers: headers).responseJSON { response in
        debugPrint(response)
     }
  1. 또한 우리가받는 응답에 따라 적절한
    • responseString
    • responseJSON
    • responseData

응답은 응답 사용에 JSON 및 단지 문자열이 아닌 경우 responseString

: 로그인의 경우 / 토큰 생성 API :

“20dsoqs0287349y4ka85u6f24gmr6pah”

responseString