nsurlconnection server нужны специальные настройки? - PullRequest
0 голосов
/ 10 мая 2011

Я хотел знать, должен ли сервер иметь специальные настройки для работы с nsurlconnections? Когда я пытался создать соединение и аутентификацию. Я не получаю никакой ошибки или предупреждения, но он не подключен.

Может ли кто-нибудь разъяснить мне это.

Спасибо

Редактировать: вот код, который я сейчас использую

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"loginURl"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; 
    NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 
    [webView1 scalesPageToFit]; 
    if (theConnection) { 
        receivedData = [[NSMutableData data] retain]; 
    } else { 
        NSLog(@"Connection Failed"); 
    } 
}

Ответы [ 3 ]

1 голос
/ 10 мая 2011

Нет, вашему серверу не требуется никаких специальных настроек. A NSURLConnection использует только простые HTTP-запросы.

Для аутентификации: вам необходимо самостоятельно реализовать необходимые методы делегирования для аутентификации. Также проверьте, если вы подключаетесь через SSL, а также внедрите для этого необходимые методы делегата.

Редактировать : Вот кусок из одного из моих приложений, которые используют HTTP-аутентификацию. Я обнаружил, что вам также необходимо вернуть YES для NSURLAuthenticationMethodHTTPBasic в методе canAuthenticateAgainstProtectionSpace:, в противном случае он не будет работать.

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
    return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust] || [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodHTTPBasic];
}
0 голосов
/ 12 мая 2011

Вот код для проекта

- (void)viewDidLoad {
    [super viewDidLoad];
    parserObject = [NSXML_Parser alloc];// parser initialization
    composerObject = [URLComposer alloc];// composer creation
    [composerObject init_URLComposer];//composer initialization

    [self.view addSubview:logIn_View];
    [webView1 loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"loginURl"]]];
    NSMutableData * receivedData = [NSMutableData alloc];
    NSLog(@"Starting the url conn");
    NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"loginURl"]                   
                                                cachePolicy:NSURLRequestUseProtocolCachePolicy                             
                                            timeoutInterval:60.0];
    NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
    [webView1 scalesPageToFit];
    if (theConnection) {

        receivedData = [[NSMutableData data] retain];

    } else {
        NSLog(@"Connection Failed");
        // Inform the user that the connection failed.
    }
}

- (void)webViewDidFinishLoad:(UIWebView *)webView{
    NSURLRequest *urlreq =  [webView request];
    NSURL *req = [urlreq URL];
    NSURL *connectingUrl = [NSURL URLWithString: @"loginURl"];
    Boolean error1 = [req isEqual:errorUrl];// use string size to identify the error in url
    Boolean error2 = [req isEqual:connectingUrl];
    if (error1) {
        //[self.view addSubview:displayObj];
    }
    else if(error2) {

    }
    else {
        NSString *session_ID = [str_Url substringFromIndex:strLen];
        XMLDataFromServer = [NSData dataWithContentsOfURL:[NSURL  URLWithString:testing_Url_String]]; 
        [self logIn_Button_Click];
    }
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

- (void)viewDidUnload {

}


- (void)dealloc {
    [super dealloc];
}

#pragma mark -
#pragma mark NSURLConnection Methods
#pragma mark -

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
    NSLog(@"canAuthenticateAgainstProtectionSpace");
    return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];
}

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
    if([challenge previousFailureCount] == 0){
        NSLog(@"Auth tried");
        NSURLCredential *credentials = [NSURLCredential credentialWithUser:@"userName" password:@"password" persistence:NSURLCredentialPersistenceNone];

        [[challenge sender] useCredential:credentials forAuthenticationChallenge:challenge];
    }
    else {
        NSLog(@"Auth failed");
    }    
}

- (void)connection:(NSURLConnection *)conn didReceiveResponse:(NSURLResponse *)response
{
    NSLog(@"didReceiveResponse: %@\n",[[response URL] absoluteString]);
}
- (void)connection:(NSURLConnection *)conn didReceiveData:(NSData *)data
{
    //NSLog(@"Did receive data: %@",data);
}

- (void)connection:(NSURLConnection *)conn didFailWithError:(NSError *)error
{

    NSLog(@"Error is:%@",error);
}

- (void)connectionDidFinishLoading:(NSURLConnection *)conn
{

    NSLog(@"connectionDidFinishLoading");
}
0 голосов
/ 10 мая 2011

Реализовать метод делегата NSURLConnection:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
           NSLog("Connection successful");
   }

Это позволит войти в консоль со строкой успешного подключения.Посмотрите данные ответа, вы можете найти в нем некоторую информацию о соединении.

...