2010-02-22 5 views
0

Titre à peu près tout dit. Mon application a l'URL et mot de passe pour le fichier myFile.ext, situé à:iPhone: Est-il possible d'ouvrir un fichier protégé par mot de passe en utilisant openURL?

https://myserver.com/stuff.cgi?db=mydb

Je veux créer un objet NSURL qui, si elle est adoptée aux méthodes canOpenURL et openURL de UIApplication, se traduira par un comportement approprié.

Est-ce possible? Si c'est le cas, comment? Et y a-t-il des problèmes de sécurité dont je devrais être au courant?

EDIT POUR CLARIFICATION:

Le code suivant produit une requête d'URL qui, lorsqu'elle est envoyée au serveur, fait avec succès l'application pour télécharger le fichier. Mais ce que je veux faire est de l'ouvrir avec openURL.

+ (NSMutableURLRequest *) requestForFileNamed: (NSString *) filename { 
    NSString *url = [NSString stringWithFormat:@"%@&user=%@&getbinfile=%@", serverLocation, username, filename]; 
    NSString *body = [NSString stringWithFormat:@"password=%@", password]; 
    return [XMLRequestBuilder postRequestWithURL:url body:body]; 
} 

méthodes de XMLRequestBuilder:

+ (NSMutableURLRequest *) requestWithURL: (NSString *) url body: (NSString *) body method: (NSString *) method { 
    NSURL * theURL = [NSURL URLWithString:url]; 
    NSMutableURLRequest * ret = [NSMutableURLRequest requestWithURL:theURL]; 
    [ret setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]]; 
    [ret setHTTPMethod: method]; 
    [ret setTimeoutInterval:kDefaultTimeoutInterval]; 
    return ret; 
} 


+ (NSMutableURLRequest *) postRequestWithURL: (NSString *) url body: (NSString *) body { 
    return [XMLRequestBuilder requestWithURL:url body:body method:@"POST"]; 
} 
+1

faites-vous référence au fichier lui-même étant protégé par mot de passe, ou que la ressource Web est protégée par mot de passe via .htaccess ou similaire? –

+0

Je suis un peu un noob dans ce domaine. . . Ce que je peux vous dire à coup sûr, c'est que la demande suivante me permettra de télécharger le fichier. URL est https://myserver.com/stuff.cgi?db=mydb&user=myAccountID&getbinfile=filename.xml corps est password = mypassword méthode POST est –

+0

Pouvez-vous envoyer le code où le NSMutableURLRequest est créé (au sein le XMLRequestBuilder)? – cagreen

Répondre

1

En supposant (comme @bodnarbm souligné) que vous souhaitez que l'authentification HTTP, il est assez simple. Implémentez simplement didReceiveAuthenticationChallenge. Voici un exemple des documents d'Apple:

Modifiez simplement [self preferencesName] et [self preferencesPassword] en nom d'utilisateur/mot de passe.

-(void)connection:(NSURLConnection *)connection 
     didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 
{ 
    if ([challenge previousFailureCount] == 0) { 
     NSURLCredential *newCredential; 
     newCredential=[NSURLCredential credentialWithUser:[self preferencesName] 
               password:[self preferencesPassword] 
               persistence:NSURLCredentialPersistenceNone]; 
     [[challenge sender] useCredential:newCredential 
       forAuthenticationChallenge:challenge]; 
    } else { 
     [[challenge sender] cancelAuthenticationChallenge:challenge]; 
     // inform the user that the user name and password 
     // in the preferences are incorrect 
     [self showPreferencesCredentialsAreIncorrectPanel:self]; 
    } 
} 

Et voici le lien: http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html

MISE À JOUR: A partir de votre commentaire ci-dessus, il ne ressemble pas à vous utilisez l'authentification HTTP (donc mon code ci-dessus vous concerne pas, mais je Je le laisse pour éventuellement aider quelqu'un d'autre).

Retour à votre problème: Définissez-vous la valeur d'en-tête de méthode HTTP sur 'POST' dans la demande? Pourquoi essayez-vous d'envoyer le pwd dans le corps (comme POST devrait) mais les autres paramètres sont dans l'URL (comme GET)? Déplacez les autres paramètres vers le corps de la requête POST. Si vous publiez votre code, il peut être plus facile de voir où vous allez mal.

+0

J'apprécie votre volonté de regarder cela. Le système avec lequel je travaille est en train de changer de méthode d'authentification, et je viens de réaliser que je récupérais le fichier avec l'ancien. Donc, il vaut mieux attendre que cette partie soit commutée avant de poster mon code. Cela peut prendre quelques jours. Je l'afficherai quand il sera prêt. Merci beaucoup. –

+0

Code affiché ci-dessus. –

Questions connexes