2012-02-27 13 views
7

Chcę, aby post formularza http za pomocą NSURLConnection w iOS. Mam dwa pola formularza i jedną opcję przesyłania pliku w formularzu HTML. Kiedy robię to samo, używając NSURLConnection, nie otrzymuję odpowiedzi.Żądanie danych formularza za pomocą NSURLConnection w iOS

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

Ale gdy używam ASIHTTPRequest i napisać następujący kod to działa, a ja dostaję odpowiedzi.

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); 
} 

Czy ktoś może mi powiedzieć co robię źle z NSURLConnection części?

+0

@dbrajkovic może mi zasugerować jeśli robię coś złego – NSCry

Odpowiedz

13

Nie kopiujesz przykładu tego linku. W tym samouczku parametr HTTPBody ma być instancją NSData, a nie NSString.

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

Właściwie zrobiłem błąd przy wpisywaniu w stosie, ja go edytować – NSCry

+0

Czy przejrzałeś dzienniki serwera? – dbrajkovic

+0

Nie mam dostępu do tego – NSCry

1

Spróbuj to ....

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

Myślę, że zrobiłem to samo. Możesz mi powiedzieć, jakie są różnice w kodzie. – NSCry

8

Próbowałem ten kod do przesyłania obrazu i jego pracę. Dodano ograniczenie.

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

To działa dobrze dla mnie.

- (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

masz kilka

rn 

w końcu swoimi strunami. Wszystkie z nich powinny być

\r\n 

Dokładniej powinno być:

[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]]; 
Powiązane problemy