0

我正在尝试从我的 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");
        }
4

1 回答 1

0

身份验证取决于 cookie 的正确功能。看起来您正在使用 Web 视图的 loadRequest 来处理您的一个请求。如果您只NSURLConnection用于这两个请求,它应该正确地管理从第一个响应中读取 cookie 并代表您在第二个请求中发送它。(请参阅URL 加载系统编程指南。)如果这仍然不起作用,那么您的服务器上的会话 cookie 设置可能有问题。

于 2012-10-30T14:07:37.713 回答