2011-11-07 10 views
0

私はいくつかの情報(テキストと画像)をサーバースクリプトに送信するiPhoneアプリケーションを作成しています。AFNetworkingファイルのアップロードはPHPスクリプトでは動作しますが、jspスクリプトでは機能しません。

私のPHPスクリプトではうまくいっていますが、私の顧客のjspスクリプト(受信した情報を電子メールアドレスに電子メールで送信します)で何も動作しません...(私は自動返信メールを受信する必要があり、起こらない)。

私は顧客であり、彼らは大きな顧客であり、いくつかのbla blaセキュリティの問題が原因です... スクリプトはオンラインWebフォームで正常に機能し、iOS 4.3のASIHTTPRequestでうまくいきました私はiOS 5 ASIHTTPRequestとAFNetworking原因に移行しています)

本当にありがとうございます!

ここに私のコードは...私のコードは常にNSLog(@ "成功")に達しますが、私は自動応答メールを受信しないので、動作していません!!

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]; 

ありがとうございます!

EDITは:(常に動作します)オンラインWebフォームから生成さ

要求::ASIHTTPでのiOS 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でのiOS 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のリクエストと比較して、どのような違いがあるかを確認します。

あなたがそれを理解できない場合は、質問を編集して2つの取得されたリクエストを含めると、誰かがそれを見つけることができると確信しています。

+0

おかげで動作します..!変更されるのはパラメータの順序だけですが、これが問題になる可能性がありますか?私はそうは思わない... – Janky

+0

それは違う唯一のものだと確信しています - すべてのヘッダーを比較しましたか?それが唯一のものならば、それは確かに問題でなければならない - 私は確かに他の違いがあるでしょう。 – JosephH

+0

OK、3つのキャプチャされたリクエストを追加しました。最初のものはWebフォームからのもので、2つ目はASIHTTPによるものです(iOS 5で動作しない場合があります) 1つはAFNetworkingである – Janky

0

AFNetworkingとmultipart/form-dataにも問題があります。解決済み。 AFNetworkingがmultipart/form-dataのためのHTTPボディを生成するとき、それはbeginigに\ r \ n sumbolsを置きます。あなたのAFNetworkingボディと他のボディとの違いは、最初は\ r \ nです。それを削除してみてください。私はいくつかのAFHTTPClientを修正しました。身体のからそれらを除去するためのメートル法が始まる:

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]; 

}

それは私のためのアドバイスを

関連する問題