iPhone から自分の Web サイトに画像をアップロードしようとしていますが、最初に認証する必要があります。
私の最初の試みは、NSMutableURLRequest を使用してログイン資格情報を含む HTTP Post 要求を送信し、次に (別の NSURLConnection で) 2 番目の NSMutableURLRequest を使用して同様の方法で画像を送信することでした。しかし、ログインから画像投稿までのセッション データが保持されなかったため、これは失敗しました。2 番目のリクエストでまだ認証エラーが発生します。
私は賢く、非表示の UIWebView を作成し、[webview loadRequest:request];
ログインと投稿の両方を呼び出すだけで、リクエストのタイプがNSMutableURLRequest
. これはうまく機能し、今では自分のウェブサイトに画像をアップロードできるようになりました.....
....しかし、iPod touch を試してみると、アプリ全体に約 10MB のメモリしか割り当てられていない (プロファイラーのおかげで)という悪名高いメッセージが表示received memory warning
され、続いてアプリがクラッシュします。[webview loadRequest:request];
リクエスト自体で、しかし UIWebView がそれをどのように処理するか。UIWebivew の「ビュー」部分が多くのメモリを割り当てていると思います。
これが私の質問です: UIWebViewを使用する必要がないように、NSURLConnections間でセッションとログインデータを保持するにはどうすればよいですか?
疑似コード:
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");
}