2015-02-23 29 views
0

我想要做一個簡單的iOS(目標C)使用模擬器而不是一個真正的設備。iOS的HTTP'獲得'有一個URL長度限制

NSMutableURLRequest *newRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:theGetURL] 
                   cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData 
                  timeoutInterval:10]; 
    [newRequest setHTTPMethod: @"GET"]; 

    NSError *requestError2; 
    NSURLResponse *urlResponse2; 


    NSData *response2 = [NSURLConnection sendSynchronousRequest:newRequest returningResponse:&urlResponse2 error:&requestError2]; 
    NSString* secondResponse = [[NSString alloc] initWithData:response2 encoding:NSUTF8StringEncoding]; 

    NSLog(@"error = %@",requestError.localizedDescription); 
    NSLog(@"response=%@",secondResponse); 
    NSLog(@"url response = %@",urlResponse); 

當我傳遞一個簡單的URL時,此代碼完美工作。當我用較長的URL(大約4000個字符)嘗試代碼時,代碼不起作用(不打印錯誤)。

我知道一個帖子更適合這種事情,但我的問題是,這是從一個獲取請求的預期?

此外,我的網址在我的Mac和iOS瀏覽器中完美工作。

+1

也許檢查'newRequest'的URL是否有效(可能是一些轉義,這似乎是錯誤的)。 – Larme 2015-02-23 10:00:44

+0

我已經在日誌中打印了'theGetURL',並且已經在模擬器瀏覽器上進行了測試,並且按預期工作。 – danb 2015-02-23 10:03:43

+0

從你說的是什麼,你已經打印了'NSString',但不是'[NSURL URLWithString:theGetURL]'? – Larme 2015-02-23 10:04:44

回答

0

正如你懷疑的,我認爲你需要考慮移動使用POST而不是GET。服務器端的限制是8K,但對於客戶端來說這似乎要少得多。

以下討論總結得很好。這似乎也意味着Safari的限制是2K,這可能意味着它與iOS相同或更低,這將解釋4000個字符的問題。

maximum length of HTTP GET request?

1

我覺得你的網址查詢參數可能有未編碼的字符。嘗試確保它。 對於編碼,你可以試試這個代碼

- (NSString *)encodeQueryParameter:(NSString *)str 
{ 
    CFStringRef ref = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, 
                   (__bridge CFStringRef)str, 
                   NULL, 
                   CFSTR(":/=,!$&'()*+;[]@#?"), 
                   kCFStringEncodingUTF8); 
    NSString *result = (__bridge_transfer NSString *)ref; 
    return result; 
} 
+0

我的查詢有很多'%'符號。我爲這些實例使用了雙重'%'作爲轉義字符。我應該在嘗試此方法之前刪除轉義字符嗎? – danb 2015-02-23 11:23:08

+0

Hi @danb,由於我不確定你的網址結構如何,我的意見是請閱讀以下鏈接http://blog.lunatech.com/2009/02/03/what-every-web-developer-must- know-about-url-encoding。您可能會發現它對URL和編碼工作很有用。那麼你一定能夠決定哪裏出了問題,在哪裏。 – eNipu 2015-02-23 11:41:28

+0

下面是一個示例url:'http://10.2.176.100:9000/recorddata?mobileData={%22mobileData%22:[{%22cpu%22:-51,%22date%22:%22142441374.5834%22,%22memory %22:978,%22battery%22:-96,%22deviceID%22:2}]}' – danb 2015-02-23 11:47:25