programing

문자 0 주변의 Alamofire 잘못된 값

testmans 2023. 10. 22. 19:43
반응형

문자 0 주변의 Alamofire 잘못된 값

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

}

알라모파이어에 대한 제 요청입니다. 어떤 요청에 대해서는 가끔은 효과가 있지만, 가끔은 다음과 같은 것을 받습니다.

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 validator에서 유효하다고 검증한 정적 json 문자열입니다.여기에는 å and 문자와 일부 HTML이 포함되어 있습니다.

왜 가끔 이런 오류가 발생합니까?

저도 같은 문제에 직면했습니다.나는 노력했다.responseString대신에responseJSON그리고 그것은 성공하였다.이게 벌레인 것 같네요.Alamofire와 함께 사용하여django.

저 같은 경우는 서버 URL이 틀렸습니다.서버 URL 확인!!

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)
            }
        }

저도 같은 오류를 당했습니다.하지만 그 해결책을 찾았습니다.

참고 1: 서버 오류로 인한 "Alarmofire error가 아닙니다.

참고 2: "response J"를 변경할 필요는 없습니다.SON"은 "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!)
            }
        }
    }

이렇게 해서 Invalid 3840 Errror를 해결했습니다.

에러 로그

 responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}))
  1. 요청에 사용된 인코딩 유형과 함께, 사용된 인코딩 유형은 서버측에서 승인되어야 합니다.

모든 Encoding Type(인코딩 유형)을 실행해야 하는 Encoding I(인코딩 I)를 알 수 있습니다.

default/ 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. 이는 또한 우리가 받고 있는 반응에 따라 다릅니다. 그에 적합한
    • 응답 문자열
    • 응답 JSON
    • 응답 데이터

응답이 JSON & just 문자열이 아닌 경우 responseString을 사용합니다.

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

"20dsoqs0287349y4ka85u6f24gmr6pah"

응답 문자열

이것을 헤더로 사용하여 해결했습니다.

let header = ["Content-Type": "application/json", "accept": "application/json"]

제 경우에는 URL에 / 가 하나 더 있었습니다.

너무 늦었을 수도 있지만 여기서 언급하지 않은 다른 방법으로 이 문제를 해결했습니다.

사용할때.responseJSON(), 다음과 같이 응답 헤더를 설정해야 합니다.content-type = application/json, 그렇지 않다면, 당신의 몸이 유효한 JSON이더라도 충돌할 것입니다.따라서 응답 헤더가 비어 있거나 다른 내용 유형을 사용하는 것일 수 있습니다.

응답 헤더가 다음과 같이 설정되어 있는지 확인합니다.content-type = application/json..responseJSON()알라모파이어에서 제대로 작동하고 있습니다.

얘들아, 이게 내 문제라는 걸 알게 됐어요.Authenticate Users(사용자 인증) 기능을 통해 Alamofire를 호출했습니다. "Body"에서 호출되는 매개 변수와 함께 "Login User(로그인 사용자)" 기능을 사용했습니다(이메일:문자열, 암호: 문자열)그것은 통과될 것입니다.

내 실수는 정확히 다음과 같습니다.

옵션(alamofire.aferror. responses 직렬화 실패(alamofire.aferror.responses 병렬화 실패 이유.json 직렬화 실패(오류 도메인=nscocoerordomain code=3840 "문자 0 주변의 invalid 값" userinfo={nsdebugdescription=문자 0 주변의 invalid 값)

문자 0이 여기서 핵심입니다. 즉, "이메일"에 대한 호출이 매개 변수와 일치하지 않음을 의미합니다.아래 코드 참조

func loginUser(전자 메일:문자열, 암호: 문자열, 완료됨: @escaping downloadComplete) {letlowerCaseEmail = e-메일입니다.소문자

    let header = [
        "Content-Type" : "application/json; charset=utf-8"
    ]
    let body: [String: Any] = [
        "email": lowerCasedEmail,
        "password": password
    ]

    Alamofire.request(LOGIN_USER, method: .post, parameters: body, encoding: JSONEncoding.default, headers: header).responseJSON { (response) in
        if response.result.error == nil {

            if let data = response.result.value as? Dictionary<String, AnyObject> {
                if let email = data["user"] as? String {
                    self.userEmail = email
                    print(self.userEmail)
                }
                if let token = data["token"] as? String {
                    self.token_Key = token
                    print(self.token_Key)
                }

함수 매개 변수의 "이메일"은 구문 분석 시 "이메일"과 일치해야 작동합니다.더이상 오류가 없습니다...문자 0은 Alamofire 요청에 대한 "body" 파라미터의 "이메일"이었습니다.

도움이 되길 바랍니다.

매개 변수에 있는 서버에 잘못된 유형(String)을 보내고 있었습니다(Int가 필요함).

Alamofire에 JSONEencoding.default 인코딩을 추가한 후 오류가 해결되었습니다.

  Alamofire.request(urlString, method: .post, parameters: 
  parameters,encoding: 
  JSONEncoding.default, headers: nil).responseJSON {  
   response in
   switch response.result {
                   case .success:
                    print(response)
                    break

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

제가 오늘 아침에 작업하던 애플리케이션도 같은 오류가 있었습니다.사용자 이미지를 업로드할 수 없어서 서버측 오류라고 생각했습니다.

그러나 사용자 지정 API를 확인한 결과 api.swift URL을 업데이트하지 않았다는 SSL 인증서를 웹 사이트에 추가한 후 데이터가 게시되지 않았음을 알게 되었습니다.

let HOME_URL = "http://sitename.io"
let BASE_URL = "http://sitename.io/api"
let UPLOAD_URL = "http://sitename.io/api/user/upload"

URL을 https://로 변경했습니다.문제는 해결됐습니다.

제 경우에는 헤더 요청에 "Accept":"application/json" 키를 추가해야 합니다.

이와 같은 것:

let Auth_header: [String:String] = ["Accept":"application/json", "Content-Type" : "application/json", "Authorization":"Bearer MyToken"]

이것이 누군가에게 도움이 되길 바랍니다.

저도 같은 문제에 직면해 있고 문제는 파람에 있습니다.

let params = [kService: service,
                  kUserPath: companyModal.directory_path,
                  kCompanyDomain: UserDefaults.companyDomain,
                  kImageObject: imageString,
                  kEntryArray: jsonString,
                  kUserToken:  UserDefaults.authToken] as [String : Any]

companyModal.directory_pathurl 입니다.서버 측에서 문제를 발생시키는 문자열에서 임의의 문자열로 강제 이동했습니다.이 문제를 해결하기 위해서는 문자열 값이 되는 기본값을 줘야 합니다.

 let params = [kService: kGetSingleEntry,
                  kUserPath: companyModal.directory_path ?? "",
                  kCompanyDomain: UserDefaults.companyDomain,
                  kUserToken: UserDefaults.authToken,
                  kEntryId: id,
                  ] as [String: Any]

경로 끝에 "/"가 있을 수 있습니다.GET 요청이 아닌 경우 마지막에 "/"를 넣지 마십시오. 그렇지 않으면 오류가 발생합니다.

아이 체인지 마임"mov"에서 "multipart/form-data"로 입력합니다.

Alamofire.upload(multipartFormData: { (multipartFormData) in
            do {
                let data = try Data(contentsOf: videoUrl, options: .mappedIfSafe)
                let fileName = String(format: "ios-video_%@.mov ", profileID)
                multipartFormData.append(data, withName: "video", fileName: fileName, mimeType: "multipart/form-data")

            } catch  {
                completion("Error")
            }
        }, usingThreshold: .init(), to: url,
           method: .put,
           headers: header)

저를 위해 일했습니다.. :)

나의 경우:

let header = ["Authorization": "Bearer \(Authserices.instance.tokenid)"]

아까 그 공간을 잊어버렸어요.\후)Bearer)

저의 경우 오류는 중복 이메일 때문이었습니다.우체부에서 API를 다시 확인하여 응답이 정상인지 아닌지 확인할 수 있습니다.

저의 경우 포스트맨을 이용하여 API를 구하려고 했는데 백엔드에서 오류가 발생했습니다.

언급URL : https://stackoverflow.com/questions/32355850/alamofire-invalid-value-around-character-0

반응형