- [NSURLRequest sendSynchronousRequest:returningResponse:error:]获取HTTP标头

时间:2009-02-09 23:47:06

标签: cocoa-touch

我正在尝试从iPhone上的同步HTTP请求中提取HTTP标头和HTTP响应代码。我通常在使用异步请求时没有遇到任何问题,尽管这里有点麻烦。 HTTP响应标头为空,HTTP状态代码为0. Web服务器配置正确,我可以在异步请求中检索我需要的详细信息。这是我的代码复制到命令行程序:

问题#1:[httpResponse allHeaderFields]返回nil。
问题#2:[httpResponse statusCode]返回0。

我错误地理解如果有错误,我现在看到的错误:错误域= NSURLErrorDomain代码= -1012 UserInfo = 0x14b100“操作无法完成。(NSURLErrorDomain错误-1012。)”,我无法访问http响应标头/状态代码?

#import <Foundation/Foundation.h>

int main (int argc, char *argv[])
{    

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    NSString *urlStr = @"http://tmp/myscript.php";
    NSString *postBody = @"foo=bar";   
    NSMutableURLRequest *request;
    NSData *postData = [postBody dataUsingEncoding:NSASCIIStringEncoding];
    NSError *error;
    NSURLResponse *response;
    NSHTTPURLResponse *httpResponse;
    NSData *dataReply;
    id stringReply;

    request = [NSMutableURLRequest requestWithURL: [NSURL URLWithString:urlStr]];

    [request setHTTPMethod: @"POST"];
    [request setHTTPBody:postData];
    [request setValue:@"text/xml" forHTTPHeaderField:@"Accept"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];  

    dataReply = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    stringReply = (NSString *)[[NSString alloc] initWithData:dataReply encoding:NSUTF8StringEncoding];
    // Some debug code, etc.
    NSLog(@"reply from server: %@", stringReply);
    httpResponse = (NSHTTPURLResponse *)response;
    int statusCode = [httpResponse statusCode];  
    NSLog(@"HTTP Response Headers %@", [httpResponse allHeaderFields]); 
    NSLog(@"HTTP Status code: %d", statusCode);
    // End debug.

    [[NSRunLoop currentRunLoop] run];
    [pool release];
    return 0;
} 

2 个答案:

答案 0 :(得分:3)

您获得的错误代码是NSURLErrorUserCancelledAuthentication,并记录在Foundation Constants Reference中。您可能正在尝试加载受密码保护的页面,在这种情况下,您可能需要在URL中添加用户名和密码。

答案 1 :(得分:1)

  

问题#1:[httpResponse allHeaderFields]返回nil。   问题#2:[httpResponse statusCode]返回0。

因为httpResponse为零,请参阅here