gpt4 book ai didi

ios - NSURLConnection 失败,没有错误

转载 作者:行者123 更新时间:2023-11-29 12:03:39 26 4
gpt4 key购买 nike

我真的需要帮助来创建一个成功的发布请求。

我正在尝试使用 NSURLConnection 将用户信息发送到服务器,我遵循了 this tutorial**

我的问题是发布请求似乎没有失败,但没有向服务器请求任何内容。这是我的代码:

-(void)sendMyRequest
{
NSString *myJSONString = [[NSString alloc] initWithData:myJSONData encoding:NSUTF8StringEncoding];

NSData *postData = [myJSONString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:signupBaseURLString]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postData];

NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];

if(conn)
NSLog(@"connection successful"); //it is what is printed
else
NSLog(@"connection failed");
}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSLog(@"data received"); //it is what is printed
}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"connection failed with error %@", error);
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"connection did finish loading"); //it is what is printed
}

根据NSLog输出'conn'成功,(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data and (void )connectionDidFinishLoading:(NSURLConnection *)connection 委托(delegate)方法被调用,错误委托(delegate)方法未被调用。这就是为什么我不知道错误是什么或是否有任何错误,如果没有,为什么我的请求没有送达。你能帮帮我吗,我做错了什么?提前致谢。

** the tutorial中有一行代码我没用过的:[request setValue:@”application/x-www-form-urlencoded” forHTTPHeaderField:@”Current-Type”]; 我没用是因为我不明白setValue 参数“application/x-www-form-urlencoded”。这可能是必要的,如果你能告诉我这是关于什么的,我将不胜感激。

更新 我在 didReceiveData 中转换了 NSData 对象 NSString *myString = [[NSString alloc] initWithData:receivedData 编码: NSUTF8StringEncoding]; 当我打印它时,我的输出真的很奇怪,介绍“Apache Tomcat/7.0.62 - 错误报告 H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color :#525D76;字体大小:22px;}...”。但是在输出的末尾它说服务器拒绝了这个请求,因为请求实体的格式不受所请求方法的请求资源的支持但我确定服务器需要字符串,我尝试以字符串格式发布,但 setHTTPBody 方法强制我发送 NSData,所以我正在做的是将 myJSONString 转换为 NSData,然后发送它。问题可能在这里引起,但我不知道还能做什么。我找不到直接发送 NSString 的方法。如何直接发布 NSString 类型?

最佳答案

很高兴您发现了数据格式的问题。也就是说,您应该修复的代码仍然存在相关问题。

使用 NSURLConnection 和 NSURLSession,服务器端错误不一定报告为错误。连接成功是因为服务器实际上正在返回数据,而不是您期望的数据。

要检测这些类型的服务器端错误,您应该实现 connection:didReceiveResponse: 并检查服务器返回的 HTTP 状态代码。如果它不是 200 (OK),请以对您的特定应用程序有意义的任何方式处理它。这也是您获取以后可能需要的各种信息的唯一机会,例如存储在 NSHTTPURLResponse 对象中的 HTTP header 值。

(当然,如果您返回的数据不是预期的格式,也将其作为错误处理,即使您收到 200 状态代码并且请求似乎已成功。)

关于ios - NSURLConnection 失败,没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35845731/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com