我正在尝试从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;
}
答案 0 :(得分:3)
您获得的错误代码是NSURLErrorUserCancelledAuthentication,并记录在Foundation Constants Reference中。您可能正在尝试加载受密码保护的页面,在这种情况下,您可能需要在URL中添加用户名和密码。
答案 1 :(得分:1)
问题#1:[httpResponse allHeaderFields]返回nil。 问题#2:[httpResponse statusCode]返回0。
因为httpResponse为零,请参阅here。