문자 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.}))
- 요청에 사용된 인코딩 유형과 함께, 사용된 인코딩 유형은 서버측에서 승인되어야 합니다.
모든 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)
}
- 이는 또한 우리가 받고 있는 반응에 따라 다릅니다. 그에 적합한
- 응답 문자열
- 응답 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_path
url 입니다.서버 측에서 문제를 발생시키는 문자열에서 임의의 문자열로 강제 이동했습니다.이 문제를 해결하기 위해서는 문자열 값이 되는 기본값을 줘야 합니다.
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
'programing' 카테고리의 다른 글
각도/각도브라우저 탭이 백그라운드일 때 JS 업그레이드 앱이 응답하지 않음 (0) | 2023.10.22 |
---|---|
레이지 로딩 각도RequireJS가 포함된 JS 모듈 (0) | 2023.10.22 |
Excel - 어떻게 하면 세 번째 열로 색을 칠할 수 있는 산점도를 만들 수 있습니까? (0) | 2023.10.22 |
부트스트랩 모드에서 특정 필드의 포커스가 나타나면 설정하는 방법 (0) | 2023.10.22 |
워드프레스 아약스는 왜 죽을까 ('0') (0) | 2023.10.22 |