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.}))
- 그것은 함께 있었다 인코딩 유형 요청에 사용되는 인코딩 유형이 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)
}
- 또한 우리가받는 응답에 따라 적절한
- responseString
- responseJSON
- responseData
응답은 응답 사용에 JSON 및 단지 문자열이 아닌 경우 responseString
예 : 로그인의 경우 / 토큰 생성 API :
“20dsoqs0287349y4ka85u6f24gmr6pah”
responseString