2012-07-12 3 views
0

비밀번호로 보호 된 웹 서버에 일부 데이터를 게시하려면 NSMutableURLRequest을 사용하고 있습니다. 나는 연결되어 있고 모든 것을 얻었고 데이터를 괜찮게 검색 할 수 있지만 어떤 이유로 나는 어떤 것도 게시 할 수 없다.NSMutableURLRequest를 사용하여 웹 서버에 데이터 게시

나는 사용자 이름과 암호로 NSURLCredentials을 사용하고 있으며 연결에 문제가 없습니다.

시작 URL 요청 :

NSString *someString = @"Hello World"; 
NSData* theData=[someString dataUsingEncoding:NSUTF8StringEncoding]; 

NSURL *someUrl = [NSURL URLWithString:@"http://myurl/myfile.txt"]; 

가 웹 서버에 쓰기 :

NSString *postLength = [NSString stringWithFormat:@"%d", [theData length]]; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setURL:someUrl]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"];  
[request setHTTPBody:theData]; 

어떤 HTTPS 인증서를 허용 :

-(void)starting { 
NSURL *url = [NSURL 
URLWithString:@"http:myurl/myfile.txt"]; 
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url]; 
urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self]; //Calling NSURLConnection delegate methods 
} 

내가 NSData에 게시 할 NSString 변환 검색을위한

[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[someUrl host]]; 

보내기 요청 :

NSError *error; 
NSURLResponse *response; 
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding]; 

이 "안녕하세요"를 검색 데이터 = 0의 길이 ..

if ([data length] == 0) { 

    UIAlertView *dataLengthNoneAlert = [[UIAlertView alloc] initWithTitle:@"No data" message:@"There is no data on the server" delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil, nil]; 

    [dataLengthNoneAlert show]; 

} 

그렇지 않은 경우는, (.. 나에게 새로운 데이터를 말해 주는가해야하는)

else { 

    NSLog(data); 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Retrieved data" message:data delegate:nil cancelButtonTitle:@"Dimiss" otherButtonTitles:nil, nil]; 

    [alert show]; 

} 

그래서 웹 서버에 데이터를 게시하고 올바르게 검색하려고합니다. 후에. 나는 내가 방금 쓴 데이터의 길이가 0이라는 것을 알았다. 나는 심지어 애플리케이션 외부의 서버를 확인하고 아무런 변화가 없다. URL이 유효합니다. NSMutableURLRequest를 처음 사용하는 것입니다. 뭔가 빠졌습니까?

답변

1

전문가는 아니지만 시도해 볼만한 몇 가지 사항은 저에게 효과적입니다.

또한

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsurlconnection_Class/Reference/Reference.html

사과 문서 NSUrlconnection의 지속적인 동적 응답을 허용하기 때문에 유형 NSMutableData 대신 NSData 같은 응답을 저장하기 위해 더 좋을 수는^4 방법, didRecieveResponse, didRecieveData, didFailwithError과의 사용을 제안한다 didFinishLoading은 데이터 추가 및 해석을 지원합니다.

희망이 도움이됩니다.

+0

'NSURLConnection's' 방법 sendSynchronousRequest : returningResponse : error :'서버의 데이터 해석에 문제가 없습니다. 문제가 게시됩니다. – Imirak

+1

'NSData * theData = [NSData dataWithBytes : [someString UTF8String] length : [someString length]];'시도해보십시오. 및 'NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL : someURL]; –

+0

그 요청은 (나는 질문에 포함되지 않은) 인증 시작에 포함되었으며, NSData * theData = [NSData dataWithBytes : [someString UTF8String] length : [someString length]];는 아무 것도 변경하지 않았습니다. 하지만 인코딩 유형과 관련이 있습니다. – Imirak

0

있는지 확인 슬래시와 함께 당신의 URL 문자열 끝 :

이 작품 :

http://your.url/ 

은하지 않습니다 일 :`의

http://your.url 
관련 문제