我需要連接到服務器而不鍵入「http://」。我只需要獲取用戶的服務器名稱和端口號。有了這個,我應該能夠連接到特定服務器...在目標c中發送HTTP請求
-1
A
回答
5
最簡單的形式,它看起來是這樣的:
- (void)loadHostName:(NSString *)hostName onPort:(NSInteger)portNumber {
responseData = [[NSMutableData alloc] init];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@:%i", hostName, portNumber]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection release];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[responseData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[responseData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSLog(@"Oh noes! %@", [error localizedDescription]);
[responseData release];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// Do something with the data, like load it in a web view.
[webView loadData:responseData MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:nil];
[responseData release];
}
在生產代碼中,你應該處理緩存請求,驗證挑戰(請參閱NSURLConnection上的消息),但上面的示例將發送HTTP請求並將其加載到Web視圖中。
1
試試這個,
NSURL *aUrl = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@:%i", hostName, portNumber]];
NSURLRequest *request = [NSURLRequest requestWithURL:aUrl
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
NSURLResponse *resp = nil;
NSError *err = nil;
NSData *response = [NSURLConnection sendSynchronousRequest: theRequest returningResponse: &resp error: &err];
NSString * theString = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
[resp release];
[err release];
NSLog(@"response: %@", theString);
+0
同步請求不好,因爲: 1.它們阻塞運行循環,所以如果它們在主線程上調用,則在等待響應時UI被鎖定。 2.您無法取消同步請求。 3.您無法響應身份驗證挑戰。 4.您無法驗證SSL證書錯誤。 5. ... 請不要使用同步請求,即使它們需要較少的代碼。 – 2011-06-16 07:30:52
0
也可以硬編碼HTTP://與服務器名稱
例如
NSString *serverName = "stackoverflow.com";
NSNumber *portNumber = 10;
NSString *finalYrl = [NSString StringWithFormat:@"HTTP://%@:%@",serverName , portNumber];
相關問題
- 1. 如何偵聽由WebView發送的HTTP請求(目標c)?
- 2. C:發送HTTP GET請求在linux
- 3. 發送HTTP請求
- 4. 發送HTTP請求
- 5. flash.media.Sound不發送HTTP請求標題
- 6. 如何在Python中發送HTTP標頭請求而不是HTTP
- 7. 在C#中發送Http請求錯誤(Http 503)
- 8. 通過ASP.NET C發送HTTP請求#
- 9. 用C#HttpWebRequest或WebClient發送HTTP請求?
- 10. 如何發送http請求c#
- 11. 將NameValueCollection發送到http請求C#
- 12. C編程 - 發送HTTP請求
- 13. C#clickatell發送短信HTTP GET請求
- 14. 發送中介忽略HTTP請求數據(僅發送標頭!)
- 15. 在發佈請求中發送http url作爲請求參數
- 16. 發送HTTP請求(驗證請求)
- 17. 快速發送請求時在目標C中使用代理
- 18. 在Ruby中發送HTTP/2 POST請求
- 19. 在Qt中發送HTTP請求
- 20. Restlet:在HTTP請求中發送xml
- 21. 在node.js中發送http請求
- 22. $ http不會在請求中發送Cookie
- 23. 在Android中發送HTTP請求
- 24. Node.js在循環中發送http請求
- 25. HTTP在Swift中發送請求參數
- 26. 在Spring MVC中發送HTTP POST請求
- 27. 在http請求(Django)中發送page_size
- 28. 在oxwall中發送http請求
- 29. 在Perl中發送HTTP請求
- 30. 如何在android中發送http請求?
@Richard設置你的ivars到零,當你與完成他們總是做一件好事,但是我把它留在了這個問題上。自動釋放它是沒有意義的。 – 2011-07-07 08:24:57
根據請求的結果,'connectionData'變量最後一次在'connectionDidFinishLoading:'或'connection:didFailWithError:'中被訪問。沒有更多的NSURLConnection回調函數,所以沒有東西可以再次訪問變量,並將它設置爲nil不會給你帶來任何好處。同樣的事情autorelasing它。這只是意味着autorelease池將在稍後發佈,而不是你現在這樣做。在這兩種情況下,你都完成了這個變量,所以你最好儘可能的保持你的內存管理。也不要在'dealloc'中釋放它。 – 2011-07-07 12:43:24
你不是在談論我正在談論的案例。這不是生產力。刪除。 – Richard 2011-07-07 13:24:26