2011-11-07 4 views
0

일부 정보 (텍스트 및 이미지)를 서버 스크립트에 보내는 iPhone 앱을 작성하고 있습니다.AFNetworking 파일 업로드는 PHP 스크립트에서 작동하지만 JSP 스크립트에서는 작동하지 않습니다.

내 php 스크립트는 모두 잘 작동하지만 내 고객의 jsp 스크립트 (이메일 주소로받은 정보로 이메일을 보냄)는 작동하지 않습니다 ... (자동 응답 이메일을 받아야하는 이유는 알고 있습니다. ').

큰 고객이고 "일부 bla bla 보안 문제 ..." 스크립트가 온라인 웹 양식에서 제대로 작동하고 iOS 4.3의 ASIHTTPRequest와 잘 작동하여 고객의 스크립트에 액세스 할 수 없습니다. 나는 ASOS 5 ASIHTTPRequest가 작동하지 않는 AFNetworking 원인으로 마이그레이션 중입니다.

어떤 도움이 정말 감사합니다 !!!

여기 내 코드는 ... 내 코드는 항상 NSLog (@ "Success")에 도달하지만 자동 응답 전자 메일을받지 못하므로 작동하지 않습니다!

AFHTTPClient *client= [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://my.client.server.com"]]; 


    NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; 
    [parameters setObject:[fieldName text] forKey:@"field01_nome"]; 
    [parameters setObject:[fieldSurname text] forKey:@"field02_cognome"]; 



    NSMutableURLRequest *myRequest = [client multipartFormRequestWithMethod:@"POST" path:@"/Contents/mail/sendToForm.jsp" parameters:parameters constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) { 
     [formData appendPartWithFileData:myNSDataToSend mimeType:@"image/jpeg" name:@"alleagto"]; 
    }]; 


    AFHTTPRequestOperation *operation = [AFHTTPRequestOperation HTTPRequestOperationWithRequest:myRequest success:^(id object) { 
     NSLog(@"Success"); 

    } failure:^(NSHTTPURLResponse *response, NSError *error) { 
     NSLog(@"Fail"); 

    }]; 


    [operation setUploadProgressBlock:^(NSInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) { 
     NSLog(@"Sent %d of %d bytes", totalBytesWritten, totalBytesExpectedToWrite); 

    }]; 

    queue = [[[NSOperationQueue alloc] init] autorelease]; 
    [queue addOperation:operation]; 

대단히 감사합니다 !!

편집 : (항상 작동) 온라인 웹 양식에서 생성

요청 : ASIHTTP와 아이폰 OS 5.0에서 생성

POST /Contents/mail/sendToForm.jsp HTTP/1.1 
Host: my.client.server.com 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.51.22 (KHTML, like Gecko) Version/5.1.1 Safari/534.51.22 
Content-Length: 54246 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 */<- added by me for syntax coloring 
Origin: http://www.client.server.com 
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryLWVo7zrkX3QOybWm 
Referer: http://www.client.server.com/form/1/send-the-form.shtml 
Accept-Language: it-it 
Accept-Encoding: gzip, deflate 
Pragma: no-cache 
Connection: keep-alive 

------WebKitFormBoundaryLWVo7zrkX3QOybWm 
Content-Disposition: form-data; name="form_recipient" 

4182fd0f318e1d86176a3be7f8c7d83955eb5eca2e1402250e47164caf1984e7 
------WebKitFormBoundaryLWVo7zrkX3QOybWm 
Content-Disposition: form-data; name="form_subject" 


------WebKitFormBoundaryLWVo7zrkX3QOybWm 
Content-Disposition: form-data; name="field01_nome" 

Gianluca 
------WebKitFormBoundaryLWVo7zrkX3QOybWm 
Content-Disposition: form-data; name="field02_cognome" 

Pisati 
------WebKitFormBoundaryLWVo7zrkX3QOybWm 
Content-Disposition: form-data; name="field03_indirizzo" 

A 
------WebKitFormBoundaryLWVo7zrkX3QOybWm 
Content-Disposition: form-data; name="field04_provincia" 

B 
------WebKitFormBoundaryLWVo7zrkX3QOybWm 
Content-Disposition: form-data; name="field05_email" 

[email protected] 
------WebKitFormBoundaryLWVo7zrkX3QOybWm 
Content-Disposition: form-data; name="field06_telefono" 

333 
------WebKitFormBoundaryLWVo7zrkX3QOybWm 
Content-Disposition: form-data; name="field07_tipo" 

valore2 
------WebKitFormBoundaryLWVo7zrkX3QOybWm 
Content-Disposition: form-data; name="allegato"; filename="allegato.jpg" 
Content-Type: image/jpeg 

Here there's the attachment 

------WebKitFormBoundaryLWVo7zrkX3QOybWm 
Content-Disposition: form-data; name="field09_oggetto" 

Test Web 
------WebKitFormBoundaryLWVo7zrkX3QOybWm 
Content-Disposition: form-data; name="field10_segnalazione" 

Send Test Web 
------WebKitFormBoundaryLWVo7zrkX3QOybWm-- 

요청 JosephH 제안으로 나는 캡처 요청을 추가했습니다 (작동하지 않음) AFNetworking와 아이폰 OS 5.0에서 생성

POST /Contents/mail/sendToForm.jsp HTTP/1.1 
Host: my.client.server.com 
User-Agent: My App 1.0 (iPhone Simulator; iPhone OS 5.0; en_US) 
Content-Length: 153522 
Content-Type: multipart/form-data; charset=utf-8; boundary=0xKhTmLbOuNdArY-ABC90FA4-3EE3-42FE-B93A-A698D7BB894D 
Accept-Encoding: gzip 
Connection: close 

--0xKhTmLbOuNdArY-ABC90FA4-3EE3-42FE-B93A-A698D7BB894D 
Content-Disposition: form-data; name="field01_nome" 

Gianluca 
--0xKhTmLbOuNdArY-ABC90FA4-3EE3-42FE-B93A-A698D7BB894D 
Content-Disposition: form-data; name="field02_cognome" 

Pisati 
--0xKhTmLbOuNdArY-ABC90FA4-3EE3-42FE-B93A-A698D7BB894D 
Content-Disposition: form-data; name="field03_indirizzo" 

A 
--0xKhTmLbOuNdArY-ABC90FA4-3EE3-42FE-B93A-A698D7BB894D 
Content-Disposition: form-data; name="field04_provincia" 

B 
--0xKhTmLbOuNdArY-ABC90FA4-3EE3-42FE-B93A-A698D7BB894D 
Content-Disposition: form-data; name="field05_email" 

[email protected] 
--0xKhTmLbOuNdArY-ABC90FA4-3EE3-42FE-B93A-A698D7BB894D 
Content-Disposition: form-data; name="field06_telefono" 

333 
--0xKhTmLbOuNdArY-ABC90FA4-3EE3-42FE-B93A-A698D7BB894D 
Content-Disposition: form-data; name="field07_tipo" 

valore2 
--0xKhTmLbOuNdArY-ABC90FA4-3EE3-42FE-B93A-A698D7BB894D 
Content-Disposition: form-data; name="field09_oggetto" 

Test iOS 5 
--0xKhTmLbOuNdArY-ABC90FA4-3EE3-42FE-B93A-A698D7BB894D 
Content-Disposition: form-data; name="field10_segnalazione" 

ASIHTTP on iOS 5 
--0xKhTmLbOuNdArY-ABC90FA4-3EE3-42FE-B93A-A698D7BB894D 
Content-Disposition: form-data; name="form_recipient" 

4182fd0f318e1d86176a3be7f8c7d83955eb5eca2e1402250e47164caf1984e7 
--0xKhTmLbOuNdArY-ABC90FA4-3EE3-42FE-B93A-A698D7BB894D 
Content-Disposition: form-data; name="form_subject" 


--0xKhTmLbOuNdArY-ABC90FA4-3EE3-42FE-B93A-A698D7BB894D 
Content-Disposition: form-data; name="allegato"; filename="image.jpg" 
Content-Type: image/jpeg 

Here there's the attachment 

--0xKhTmLbOuNdArY-ABC90FA4-3EE3-42FE-B93A-A698D7BB894D-- 

요청 (... 다른 시간, 이유는 모르겠지만, 가끔 작동) :

POST /Contents/mail/sendToForm.jsp HTTP/1.1 
Host: my.client.server.com 
User-Agent: com.mycompany.myapp/1.0 (unknown, iPhone OS 5.0, iPhone Simulator, Scale/1.000000) 
Content-Length: 153203 
Accept: */*      */<- added by me for syntax coloring 
Accept-Language: en, fr, de, ja, nl, it, es, pt, pt-PT, da, fi, nb, sv, ko, zh-Hans, zh-Hant, ru, pl, tr, uk, ar, hr, cs, el, he, ro, sk, th, id, ms, en-GB, ca, hu, vi, en-us;q=0.8 
Accept-Encoding: gzip 
Content-Type: multipart/form-data; boundary=Boundary+0xAbCdEfGbOuNdArY 
Connection: keep-alive 


--Boundary+0xAbCdEfGbOuNdArY 
Content-Disposition: form-data; name="form_recipient" 

4182fd0f318e1d86176a3be7f8c7d83955eb5eca2e1402250e47164caf1984e7 
--Boundary+0xAbCdEfGbOuNdArY 
Content-Disposition: form-data; name="field04_provincia" 

B 
--Boundary+0xAbCdEfGbOuNdArY 
Content-Disposition: form-data; name="field05_email" 

[email protected] 
--Boundary+0xAbCdEfGbOuNdArY 
Content-Disposition: form-data; name="field07_tipo" 

valore2 
--Boundary+0xAbCdEfGbOuNdArY 
Content-Disposition: form-data; name="field01_nome" 

Gianluca 
--Boundary+0xAbCdEfGbOuNdArY 
Content-Disposition: form-data; name="field10_segnalazione" 

AFNetworking on iOS 5 
--Boundary+0xAbCdEfGbOuNdArY 
Content-Disposition: form-data; name="field02_cognome" 

Pisati 
--Boundary+0xAbCdEfGbOuNdArY 
Content-Disposition: form-data; name="form_subject" 


--Boundary+0xAbCdEfGbOuNdArY 
Content-Disposition: form-data; name="field06_telefono" 

333 
--Boundary+0xAbCdEfGbOuNdArY 
Content-Disposition: form-data; name="field09_oggetto" 

Test iOS 5 
--Boundary+0xAbCdEfGbOuNdArY 
Content-Disposition: form-data; name="field03_indirizzo" 

A 
--Boundary+0xAbCdEfGbOuNdArY 
Content-Disposition: form-data; name="allegato"; filename="allegato-342447627.jpeg" 
Content-Type: image/jpeg 

Here there's the attachment 

--Boundary+0xAbCdEfGbOuNdArY-- 

답변

0

ASIHTTPRequest는 iOS 5.0에서 정상적으로 작동합니다. ASIHTTPRequest를 사용하는 100 가지 앱은 iOS 5에서 문제가 없습니다.

그렇다면 AFNetworking으로 옮기는 것이 장기적으로는 의미가있을 것입니다.

"이 코드는 브라우저에서 작동하지만 형식이 아닌"문제는 코드 검사로 해결하기가 어렵습니다. 가장 쉬운 방법은 charlesproxy와 같은 도구를 설치하는 것입니다.

일단 설치되면 캡처를 시작한 다음 브라우저에서 요청을 수행하고 성공적으로 실행되었는지 확인한 다음 iOS 시뮬레이터에서 수행하십시오. 그런 다음 브라우저의 요청을 AFNetworking의 요청과 비교하여 어떤 차이점이 있는지 확인하십시오.

알아낼 수없는 경우 두 개의 캡처 된 요청을 포함하도록 질문을 수정하면 누군가가이를 발견 할 수있을 것이라고 확신합니다.

+0

덕분에 작동합니다 .. !! 변경되는 유일한 것은 매개 변수의 순서입니다. 이것이 문제 일 수 있습니까? 나는 그렇게 생각하지 않는다 ... – Janky

+0

그것이 유일하다라고 확신 하는가? 당신은 모든 헤더를 비교 했는가? 그게 유일한 유일한 것이라면 분명히 문제가 될 것입니다 - 나는 다른 차이점이있을 것이라고 확신합니다. – JosephH

+0

괜찮아요. 3 가지 캡처 된 요청을 추가했습니다. 첫 번째 것은 웹 양식에서, 두 번째는 ASIHTTP (때로는 작동하지 않는 iOS 5와 함께! 나는 이유를 모르지만 ...), 세 번째 하나는 AFNetworking을 사용합니다 – Janky

0

AFNetworking 및 multipart/form-data에도 문제가 있습니다. 해결 됐어. AFNetworking이 multipart/form-data에 대한 HTTP 본문을 생성하면 \ beginit에 sumbols를 넣습니다. AFNetworking 시체와 다른 시체의 차이점은 처음에는 \ r \ n입니다. 그것을 제거하려고합니다. AFHTTPClient를 수정했습니다.m 방법은 시작 몸에서 제거하기 :

static inline NSString * AFMultipartFormEncapsulationBoundary() { 
    return [NSString stringWithFormat:@"%@--%@%@", @""/*kAFMultipartFormLineDelimiter*/, kAFMultipartFormBoundary, kAFMultipartFormLineDelimiter]; 

}

과 :

- (void)appendPartWithHeaders:(NSDictionary *)headers body:(NSData *)body { 
    [self appendString:AFMultipartFormEncapsulationBoundary()]; 

    for (NSString *field in [headers allKeys]) { 
     [self appendString:[NSString stringWithFormat:@"%@: %@%@", field, [headers valueForKey:field], kAFMultipartFormLineDelimiter]]; 
    } 

    [self appendString:kAFMultipartFormLineDelimiter]; 
    [self appendData:body]; 
    [self appendString:kAFMultipartFormLineDelimiter]; 

}

그것은 나를 위해 조언을

관련 문제