Ios 是否有一个';技巧';用于在NSURLSession连接中发送原始NSString而不是NSData?
我正在尝试使用NSURLSession与后端通信,但是,后端未设置为正确读取NSData,因此它将我发送的NSData登录详细信息视为false,我想知道是否可以让NSURLSession发送原始字符串而不是NSData对象。我查阅过书籍和网络,几个星期来一直被难倒 重做后端不是一个选项,负责该选项的工程师离开了。欢迎任何帮助 谢谢。以下是我到目前为止所做的工作,以防有人需要查看一些代码Ios 是否有一个';技巧';用于在NSURLSession连接中发送原始NSString而不是NSData?,ios,objective-c,json,nsdata,nsurlsession,Ios,Objective C,Json,Nsdata,Nsurlsession,我正在尝试使用NSURLSession与后端通信,但是,后端未设置为正确读取NSData,因此它将我发送的NSData登录详细信息视为false,我想知道是否可以让NSURLSession发送原始字符串而不是NSData对象。我查阅过书籍和网络,几个星期来一直被难倒 重做后端不是一个选项,负责该选项的工程师离开了。欢迎任何帮助 谢谢。以下是我到目前为止所做的工作,以防有人需要查看一些代码 NSError *error; NSURLSessionConfiguration *sessionCon
NSError *error;
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration ];
NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate:self delegateQueue:nil];
NSString *rawUrlString = @"backend_url";
NSURL *url = [NSURL URLWithString:rawUrlString];
NSLog(@"%@", url);
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:
login data here
nil];
//NSLog(@"%@", parameters);
NSData *rawJson = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:&error];
NSString *myString = [[NSString alloc] initWithData:rawJson encoding:NSUTF8StringEncoding];
NSData *finalData = [myString dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData *body = [NSMutableData data];
[body appendData:finalData];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:body];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json" forHTTPHeaderField:@"charset"];
[request setValue:@"XMLHttpRequest" forHTTPHeaderField:@"X-Requested-With"];
NSURLSessionDataTask *postTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
{
NSLog(@"%@", [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]);
}];
[postTask resume];
`
更新:我已经清理了不必要的部分,这是最终的代码(尽管仍然不起作用)
您的后端已设置为处理
NSData
。通过internet连接发送字符串是不可能的,您只能发送NSData
,所有服务器都需要它
这里的代码是错误的:
NSData *rawJson = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:&error];
NSString *myString = [[NSString alloc] initWithData:rawJson encoding:NSUTF8StringEncoding];
NSData *finalData = [myString dataUsingEncoding:NSUTF8StringEncoding];
相反,只需这样做:
NSData *finalData = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:&error];
NSData
对象将包含一个格式正确的字符串,以便服务器也能识别为字符串。请注意,它将采用UTF-8编码,可能在某些服务器上您希望将其更改为其他编码。在最低级别,您只需向服务器发送字节。NSData和NSString等对象只是更高级别的抽象。您从服务器得到了什么响应?将字符集标题设置为“application/json”在我看来是错误的,因为这是一种mime类型,而不是一个字符集。我收到一个错误,告诉我用户名和密码字段是必需的。您提供的参数是json,但标题说您打算发送x-www-form-urlencoded
。是哪一个?如果是JSON,您的内容类型应该更改。如果不是JSON,那么您的HTTPBody
应该会更改。brilliant Rob,我来试一试。Thanks@JoshuaAreogun请求看起来基本正确,因此问题可能是服务器代码和客户端代码不同步。您没有分享登录
的构造方式,也没有分享服务器正在寻找的内容。但问题无疑在于两者之间的脱节。你说的“没有运气”是什么意思?哪一行代码没有按应有的方式工作?我所有的代码都可以工作。正如我在问题的开始部分提到的,我需要知道是否有一个解决方法来发送原始字符串,因为服务器端代码似乎有问题,我无法访问它。服务器仍然无法解码NSDatainfo@JoshuaAreogunNSData不需要解码,它没有任何类型的编码。问题不在于NSData,而在于你做错了什么。你能提供运行服务器的人的详细信息吗?你应该如何使用它?或者其他语言的参考代码?
NSData *finalData = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:&error];