我正在尝试从我的 iPhone 将图片上传到我的网站,但我需要先进行身份验证。
我的第一次尝试是使用 NSMutableURLRequest 使用我的登录凭据发送 HTTP Post 请求,然后使用第二个 NSMutableURLRequest(在单独的 NSURLConnection 中)以类似的方式发送图像。但这失败了,因为从登录到图像帖子没有保留任何会话数据。我仍然在第二个请求中遇到了身份验证错误。
我想我会很聪明并创建一个隐藏的 UIWebView 并只调用[webview loadRequest:request];
登录然后发布图像,其中 request 类型为NSMutableURLRequest
。这很好用,现在我可以将图像上传到我的网站......
....但是,当我在我的 iPod touch 上尝试时,received memory warning
当我打电话时[webview loadRequest:request];
我只为整个应用程序分配了大约 10MB 的内存(感谢分析器)所以我猜它不是在请求本身,但 UIWebView 如何处理它。我认为 UIWebivew 的“视图”部分分配了大量内存。
这是我的问题:如何保持 NSURLConnections 之间的会话和登录数据,这样我就不必使用 UIWebView?
伪代码:
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[request setHTTPShouldHandleCookies:YES];
[request setTimeoutInterval:180];
[request setHTTPMethod:@"POST"];
[ request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
NSURL* url = [[NSURL alloc]initWithString:@"http://website.com/login.php"];
NSMutableData *body = [NSMutableData data];
[body appendData:[@"username=me&password=password&" dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];
NSString *postLength = [NSString stringWithFormat:@"%d", [body length]];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setURL:url];
然后:
[self.webview loadRequest:request];
或者:
NSURLConnection* connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if (connection) {
NSLog(@"Login Opened");
responseData = [NSMutableData data];
} else {
NSLog(@"Logon failed");
}