2012-02-27 15 views
7

iOSのNSURLConnectionを使用してhttpフォームの投稿を作成します。 HTMLフォームに2つのフォームフィールドと1つのファイルアップロードオプションがあります。 NSURLConnectionを使って同じことをしているとき、私は応答を得ていません。フォームデータiOSのNSURLConnectionを使用したリクエスト

NSString *urlString = @"http://url/test.php"; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setURL:[NSURL URLWithString:urlString]]; 
[request setHTTPMethod:@"POST"]; 

NSString *contentType = [NSString stringWithFormat:@"multipart/form-data"]; 
[request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

NSMutableData *body = [NSMutableData data]; 
[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"file\"; filename=\"myphoto.png\"rn"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-streamrnrn"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:filedata]; 
[body appendData:[[NSString stringWithFormat:@"&s=YL4e6ouKirNDgCk0xV2HKixt&hw=141246514ytdjadh"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[request setHTTPBody:body]; 

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 
NSLog(@"RETURNED:%@",returnString); 

しかし、私はASIHTTPRequestを使用して、次のコードを書くとき、それが働いていると私は応答を取得しています。

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://url/test.php"]]; 
[request setPostValue:@"YL4e6ouKirNDgCk0xV2HKixt&hw" forKey:@"ssf"]; 
[request setPostValue:@"141246514ytdjadh" forKey:@"sds"]; 
[request setData:filedata withFileName:@"myphoto.png" andContentType:@"image/jpeg" forKey:@"file"]; 
[request startSynchronous]; 

NSError *error = [request error]; 
if (!error) { 
    NSString *response = [request responseString]; 
    NSLog(@"response:%@",response); 
} 

NSURLConnectionの部分に間違っていることを教えてもらえますか?

+0

@dbrajkovicはあなたが私を提案することができ – NSCry

答えて

13

リンクの例はコピーしていません。このチュートリアルでは、HTTPBodyパラメータはNSStringではなくNSStringのインスタンスであると想定されています。

[request setHTTPMethod:@"POST"]; 
NSString *myString = [NSString stringWithFormat:@"value1=test3&value2=test"]; 
[request setHTTPBody:[myString dataUsingEncoding:NSUTF8StringEncoding]]; 
+0

スタックに書き込む際に実際に、私は間違いを行っている、私はそれを編集しました – NSCry

+0

サーバーのログを見ましたか? – dbrajkovic

+0

私はそのアクセスがありません – NSCry

1

NSURL *url = [NSURL URLWithString:@"URL"]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 

[request setHTTPMethod:@"POST"]; 


NSString *myRequestString [email protected]"Request string"; 
NSLog(@"%@",myRequestString); 
NSData *myRequestData = [ NSData dataWithBytes: [ myRequestString UTF8String ] length: [ myRequestString length ] ]; 

[ request setHTTPBody: myRequestData ]; 

NSURLResponse *response; 
NSError *err; 
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err]; 
NSString *content = [NSString stringWithUTF8String:[responseData bytes]]; 
+0

私は同じ事をしたと思います。あなたはコード内の相違点を教えてください。 – NSCry

8

....これを試してみてください、私は画像とその作業をアップロードするため、このコードを試してみました。バウンドリーを追加しました。

NSString *urlString = @"URL"; 

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:[NSURL URLWithString:urlString]]; 
[request setHTTPMethod:@"POST"]; 

NSString *boundary = @"---------------------------14737809831466499882746641449"; 
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; 
[request addValue:contentType forHTTPHeaderField:@"Content-Type"]; 

NSMutableData *body = [NSMutableData data]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[@"Content-Disposition: form-data; name=\"userfile\"; filename=\"Test.png\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[NSData dataWithData:imageData]]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[request setHTTPBody:body]; 

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 
2

これは問題なく機能しています。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSMutableURLRequest *req=[[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:@"http:///URL/iinsert.php"]]; 

    NSString *[email protected]"name=abhii&address=knrr"; 
    NSData *myreqdata=[NSData dataWithBytes:[myreqstr UTF8String] length:[myreqstr length]]; 
    [req setHTTPMethod:@"POST"]; 

    [ req setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"]; 
    [ req setHTTPBody: myreqdata ]; 

    //[req setValue:@"abhii" forHTTPHeaderField:@"name"]; 
    //[req setValue:@"kar" forHTTPHeaderField:@"address"]; 
    NSData *data=[NSURLConnection sendSynchronousRequest:req returningResponse:nil error:nil]; 
    NSLog(@"%@",data); 
    NSString *returnstring=[[NSString alloc]initWithData:data encoding:NSASCIIStringEncoding]; 
    NSLog(@"%@",returnstring); 




    // Do any additional setup after loading the view, typically from a nib. 
} 
0

あなたは、文字列の最後にいくつかの

rn 

を持っています。それらのすべてがあるべき

\r\n 

は、より正確に、それは次のようになります。私は何も悪いことをやっている場合

[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"file\"; filename=\"myphoto.png\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
関連する問題