2011-09-28 163 views
0

今天,我遇到了NSURLConnection的問題。我想下載URL http://api.wunderground.com/api/fs3a45dsa345/geolookup/q/34.532900,-122.345.json的內容。如果我只是將網址粘貼到Safari中,我會得到正確的回覆。但是,如果我使用NSURLConnection做同樣的事情,則會收到「找不到」答覆。這裏是我使用的代碼:與NSURLConnection相關的問題

NSURL *requestURL = [[NSURL alloc] initWithString:@"same url as above"]; 
NSURLRequest *urlRequest = [[NSURLRequest alloc] initWithURL:requestURL]; 
NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest 
                   delegate:self 
                 startImmediately:YES]; 

這裏有什麼問題?

回答

2

確保您通過發送一個stringByAddingPercentEscapesUsingEncoding:消息逃逸URL字符串中的任何特殊字符,例如:

NSString *s = [@"some url string" stringByAddingPercentEscapesUsingEncoding:NSUTFStringEncoding]; 
NSURL *requestURL = [NSURL URLWithString:s]; 

編輯

原來的Web服務請求失敗因爲默認情況下,用戶代理標頭不會被設置。要設置它,使用的NSMutableURLRequest的實例,而不是NSURLRequest創建請求,如下圖所示:

NSMutableURLRequest *myRequest = [NSMutableURLRequest requestWithURL:myURL]; 
[myRequest setValue:@"My App" forHTTPHeaderField:@"User-Agent"]; 
+0

也不起作用(該方法不會改變字符串)。我也使用了其他網址編碼技術,但都沒有工作。 – ryyst

+0

感謝您的編輯,它現在的作品!我可以問你是如何發現這一點的? – ryyst

0

委託代碼在哪裏?對於異步NSURLConnection,需要有一個delegate方法來接收返回的數據。其他選項包括sendSynchronousRequest:或者如果它必須是異步包裝sendSynchronousRequestGCD block

+0

它的實現,但我離開它,因爲它工作正常(網站返回一個HTML頁面,上面寫着「未找到」)。 – ryyst