Passage de paramètre dans l'url pour OBTENIR la méthode à l'aide de afnetworking
j'ai l'url de la requête est exécutée.
https://<BASE_URL>/<TENANT_URL>/?query=where UserName='abc'&companyId=&page=1&pageSize=25&filterResultByColumns=true
je suis de s'échapper de la partie restante après locataire url comme ceci,
NSString *requestUrl = [[NSString stringWithFormat:@"%@/?query=where UserName='%@'&companyId=&page=1&pageSize=25&filterResultByColumns=true",<TENANT_URL>,userCredential.userName]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
requestUrl = [NSString stringWithFormat:@"%@/%@",baseurl,requestUrl];
Voici ma requête GET.
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
AFHTTPResponseSerializer *serializer = [AFHTTPResponseSerializer serializer];
serializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"];
manager.responseSerializer = serializer;
manager.requestSerializer = [AFJSONRequestSerializer serializer];
NSString *path = [NSString stringWithFormat:@"%@",URL];
[manager GET:path parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSError* error = nil;
NSArray* json = [NSJSONSerialization
JSONObjectWithData:responseObject
options:kNilOptions
error:&error];
success(json);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failure(error);
}];
Mais j'ai toujours l'obtention d'un 400 Bad request error. Je pense que le problème est avec la requête"=..". Mais je ne suis pas sûr. Comment puis-je analyser l'URL. J'ai testé avec "FACTEUR" dans Chrome. Il fonctionne parfaitement. Mais il me lance une erreur quand je lance l'application.
Erreur:
Error Domain=AFNetworkingErrorDomain Code=-1011 "Request failed: bad request (400)" UserInfo=0xb7ac2b0 {NSErrorFailingURLKey=https://<BASE_URL>/<TENANT_URL>/?query=where UserName='abc'&companyId=&page=1&pageSize=25&filterResultByColumns=true&url=https%3A%2F%2F<BASE_URL>%2F%2F<TENANT_URL>%2F%3F?query=where%2DUserName%3D%27abc%27%26companyId%3D%26page%3D1%26pageSize%3D25%26filterResultByColumns%3Dtrue, AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0xb7e6910> { URL: https://<BASE_URL>/<TENANT_URL>/?query=where UserName='abc'&companyId=&page=1&pageSize=25&filterResultByColumns=true&url=https%3A%2F%2F<BASE_URL>%2F%2F<TENANT_URL>%2F%3F?query=where%2DUserName%3D%27abc%27%26companyId%3D%26page%3D1%26pageSize%3D25%26filterResultByColumns%3Dtrue } { status code: 400, headers {
"Cache-Control" = private;
"Content-Length" = 0;
"Content-Type" = "text/html";
Date = "Fri, 17 Jan 2014 05:29:56 GMT";
Server = "Microsoft-HTTPAPI/2.0";
"X-AspNet-Version" = "4.0.30319";
"X-Powered-By" = "ASP.NET";
} }, NSLocalizedDescription=Request failed: bad request (400)}
stackoverflow.com/a/18573417/2439156
L'erreur que vous avez posté, ce qui semble indiquer que vous n'avez pas mis les valeurs réelles dans votre URL - c'est montrer:
Oui il a une réelle adresse web. J'ai posté ici avec mannequin d'URL. J'ai parcouru l'url dans le navigateur chrome. Il semble de travail. Mais lorsque je l'exécute sur simulateur. j'obtiens cette erreur.
En passant
Lors de la décodage la % codé composant de requête enregistrée dans le message d'erreur, j'obtiens ceci:
L'erreur que vous avez posté, ce qui semble indiquer que vous n'avez pas mis les valeurs réelles dans votre URL - c'est montrer:
https://<BASE_URL>/<TENANT_URL>/?query=where UserName='abc'&companyId=&page=1&pageSize=25&filterResultByColumns=true&url=https%3A%2F%2F<BASE_URL>%2F%2F<TENANT_URL>%2F%3F?query=where%2DUserName%3D%27abc%27%26companyId%3D%26page%3D1%26pageSize%3D25%26filterResultByColumns%3Dtrue
, qui ne contiennent pas de véritable adresse web de frapper. Êtes-vous sûr que vous êtes en passant l'URL que vous avez créé à AFNetworking?Oui il a une réelle adresse web. J'ai posté ici avec mannequin d'URL. J'ai parcouru l'url dans le navigateur chrome. Il semble de travail. Mais lorsque je l'exécute sur simulateur. j'obtiens cette erreur.
En passant
query=where UserName='abc'
dans le cadre d'une URL semble être une mauvaise idée - cela fait-il partie d'un raw de requête SQL? Si oui, votre service web a vraiment besoin d'un peu d'attention, car il est probable vulnérables à une attaque par injection SQL. Il également n'a pas l'air de s'échapper correctement, que vous avez encore un espace de, les " marques, et un symbole égal.Lors de la décodage la % codé composant de requête enregistrée dans le message d'erreur, j'obtiens ceci:
where-UserName='abc'&companyId=&page=1&pageSize=25&filterResultByColumns=true
. Le trait d'union "-" après "où" est certainement pas correct. Donc, je me demandais comment vous precent codé de la requête d'origine du composant.OriginalL'auteur iPhone Guy | 2014-01-17
Vous devez vous connecter pour publier un commentaire.
Il semble que il ya un certain nombre de problèmes avec l'URL de la construction et de la façon dont vous êtes de passage (ou ne passe pas) avec des paramètres AFNetworking. Vous n'avez pas besoin de construire votre chaîne de requête, vous-même, comme AFNetworking le fera pour vous. Comme mentionné dans mon commentaire ci-dessus, en passant
query=where UserName='abc'
dans le cadre d'une URL semble être une mauvaise idée. Cependant, voici un rapide exemple de la façon dont vous souhaitez appeler AFNetworking deGET
méthode si votre URL est légèrement différente:Si vous passez vos paramètres dans la méthode GET, AFNetworking permettra de construire la chaîne de requête pour vous.
j'ai obtenu la réponse.Mais il semble être incorrect. Parce que quand je navigue dans l'url https://<BASE_URL>/<TENANT_URL>/. je reçois mannequin réponse qui ne prend aucun paramètre que je suis de passage.
James, vous dites "passage de paramètres dans le cadre d'une URL semble une mauvaise idée", pourquoi? À mon humble avis, ce n'est pas suffisant pour exploiter l'injection SQL.
Je ne dis pas que le passage de paramètres dans son ensemble est une mauvaise idée - bien sûr, c'est la manière d'OBTENIR les demandes de travail. J'ai été en se référant expressément à ce paramètre:
query=where UserName='abc'
- il semble qu'il est destiné à être utilisé dans le cadre d'une requête SQL de type SELECT sur le côté serveur.Juste curieux, n'
@"filterResultByColumns": @YES
construirefilterResultByColumns=1
oufilterResultByColumns=true
dans votre URL?OriginalL'auteur James Frost