2013-02-06 2 views
2

AFNetworking을 사용하여 CardShark's API에 이미지를 제출하려고합니다.AFNetworking base64 매개 변수, NSJSONSerialization에 의해 이스케이프 처리되는 문자

NSData *imageData = UIImageJPEGRepresentation(cardImage, 1.0); 
NSDictionary *parameters = @{@"front" : [imageData base64EncodedStringWithSeparateLines:NO]}; 

NSString *path = [NSString stringWithFormat:@"cardShark?webhookUrl=%@&apiKey=%@", kCardSharkWebHookURLEncodedString, kCardSharkAPIKey]; 

[self postPath:path parameters:parameters 
     success:^(AFHTTPRequestOperation *operation, id responseObject) 
{ 
    completion(responseObject, nil); 
} 
     failure:^(AFHTTPRequestOperation *operation, NSError *error) 
{ 
    completion(nil, error); 
}]; 

나는 base64 문자열의 모든 조합을 시도했습니다. 아무 소용

base64EncodedStringWithSeparateLines:YES 
base64EncodedStringWithSeparateLines:NO 
base64EncodedString` 

, 나는 일이 탈출되고 있음을보고하고 생성 요청에 HTTPBody을 검사 한 후.

원시 base64로는

/9j/4AAQSkZJRgABAQAAAQABAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAAB AAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAEOKAD AAQAAAABAAACrAAAAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB

로 시작하지만 AFNetworking 및 아마 NSJSONSerialization을 통해 사라 졌어요 일단 당신이 /을 볼 수 있듯이 탈출하고있다

\/9j\/4AAQSkZJRgABAQAAAQABAAD\/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAEOKADAAQAAAABAAACrAAAAAD\/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH\/

으로 게시되고있다 . 탈출을 방지하려면 어떻게해야합니까? 다른 도구 (la, curl)를 통해 정확한 JSON 본문을 API에 전달하면 API에서 오류가 발생합니다. 그럼 여기서 가장 좋은 접근 방법은 무엇입니까?

답변

0

이것이 API의 결함이 더 많은 것으로 나타났습니다. AFNetworking에는 charset=utf-8으로 Content-Type 헤더를 설정하는 다음 코드가 있습니다.

case AFJSONParameterEncoding:; 
        [request setValue:[NSString stringWithFormat:@"application/json; charset=%@", charset] forHTTPHeaderField:@"Content-Type"]; 
        [request setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters options:0 error:&error]]; 
        break; 

무엇이든 내 이해 넘어 이유로, 자신의 API는 헤더에 charset 속성을 지원하지 않았다.

위와 같이 빠른 시일 내에이 문제를 해결할 수 있었으며 이제는 위의 코드를 수정하지 않고 작업하고 있습니다.

+0

RestKit에서 같은 문제가 발생했습니다. 어떤 코드 수정과 어떤 파일을 처리해야하는지 알려주세요. RestKit은 여전히 ​​AFN 1.3을 사용하므로 코드를 수정해야합니다. 여기 내 질문에 대답 할 수 있습니다. http://stackoverflow.com/questions/29318016/prevent-restkit-from-adding-escape-characters –