2014-01-17 155 views
3

我有執行查詢的URL。在使用網絡傳遞的GET方法中傳遞參數

https://<BASE_URL>/<TENANT_URL>/?query=where UserName='abc'&companyId=&page=1&pageSize=25&filterResultByColumns=true 

我正在逃離租戶網址這樣後的剩餘部分,

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

這是我的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); 
        }]; 

但我總是收到400錯誤的請求錯誤。我認爲問題在於「query = where ..」。但我不確定。我如何解析URL。我在Chrome中使用「POSTMAN」進行測試。它完美的作品。但是當我運行應用程序時,它會引發錯誤。

錯誤:

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)} 
+0

http://stackoverflow.com/a/18573417/2439156 –

+0

您發佈的錯誤似乎表明您沒有將實際值放入您的網址 - 它顯示:https:// //?query = where UserName ='abc'&companyId =&page = 1&pageSize = 25&filterResultByColumns = true&url = https%3A%2F%2F %2F%2F %2F%3F?query = where%2DUserName%3D%27abc%27%26companyId %3D%26page%3D1%26pageSize%3D25%26filterResultByColumns%3Dtrue',它不包含任何真正的網址。你確定你將你創建的URL傳遞給AFNetworking嗎? –

+0

是的,它有真實的網址。我在這裏發佈了虛擬URL。我瀏覽鉻的網址。它似乎工作。但是當我在模擬器上運行它。我收到這個錯誤。 –

回答

12

它看起來像有一些與你正在構造URL的問題,你傳遞(或不經過)參數爲AFNetworking的方式。你不需要自己構造你的查詢字符串,因爲AFNetworking會爲你做。正如我在上面的評論中提到的那樣,將query=where UserName='abc'作爲URL的一部分傳遞似乎是一個糟糕的主意。但是,這裏有一個你會怎麼稱呼AFNetworking的GET方法,如果您的網址是略有不同的一個簡單的例子:

// URL format: https://<BASE_URL>/<TENANT_URL>/?username=abc&companyId=&page=1&pageSize=25&filterResultByColumns=true 

NSURL *baseURL = [NSURL URLWithScheme:@"https" host:BASE_URL path:TENANT_URL]; 

[manager GET:[baseURL absoluteString] 
    parameters:@{ @"username": @"abc", 
       @"companyId": @"example", 
       @"page": @1, 
       @"pageSize": @25, 
       @"filterResultByColumns": @YES } 
    success:^(AFHTTPRequestOperation *operation, id responseObject) { 
      // handle success 
      } 
    failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
      // handle failure 
      }]; 

如果你通過參數轉換成GET方法,AFNetworking將構建查詢字符串爲您服務。

+0

是的。你拯救了我的一天。謝謝 –

+0

我得到了答案,但它似乎是不正確的。因爲當我瀏覽網址https:// / /。我得到了虛擬的迴應,並沒有採用我傳遞的任何參數。 –

+0

詹姆斯,你說「傳遞參數作爲URL的一部分似乎是一個壞主意」,爲什麼?恕我直言,這是不足以利用SQL注入。 – CouchDeveloper