【发布时间】:2016-03-07 14:02:41
【问题描述】:
我真的需要帮助才能创建成功的发布请求。
我正在尝试使用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和(void)connectionDidFinishLoading:(NSURLConnection *)connection委托方法,不调用错误委托方法。这就是为什么我不知道错误是什么或是否有任何错误,如果没有,为什么我的请求没有交付。你能帮我吗,我做错了什么?提前致谢。
** 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 encoding:NSUTF8StringEncoding]; 一样,当我打印它时,我的输出对于那个介绍“Apache Tomcat/7.0.62 - 错误报告H1 { font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;}..."。但是在输出的末尾它说服务器拒绝了这个请求,因为请求实体的格式不受所请求方法的请求资源支持,但我确定服务器需要字符串,我尝试以字符串格式发布,但 setHTTPBody 方法强制我发送 NSData,所以我正在做的是将 myJSONString 转换为 NSData 然后发送它。问题可能在这里引起,但我不知道还能做什么。我找不到直接发送 NSString 的方法。怎样才能直接发布 NSString 类型?
【问题讨论】:
-
如何将所有数据附加在一起(在
connection: didReceiveData:中接收)并在connectionDidFinishLoading:中打印?如果出现错误,您的服务器可能会回复特殊响应 -
让我试试这个,我会告诉你结果如何。
-
我将
NSData对象保存在didReceiveData中,然后在connectionDidFinishLoading:中尝试将其转换为JSON 格式时出现Domain=NSCocoaErrorDomain Code=3840 "Invalid value在字符 0 附近。” 但我不知道这是否有帮助。 -
将其转换为
NSString,而不是 JSON。您的答案可能不是 JSON(因为它似乎不是) -
我有类似的问题,问题是关于服务器端的。检查您的服务器可能没有处理您发送的数据。
标签: ios objective-c json nsurlconnection