以下问题: 我每次都会收到错误 -1000,但真的不知道我能改变什么。我已经用 GET 和另一种发送方法试过了。但是我每次都会遇到同样的错误。 有人看到我的错误吗? 谢谢
NSString *get =[[NSString alloc] initWithFormat:@"mobileNumber=%@&deviceToken=%@",myMobileNumber,myDeviceToken];
[get stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"http://myHomepage.net/login.php?%@",get]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:url];
NSError *error = [[NSError alloc] init];
NSHTTPURLResponse *response = nil;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *responseData = @"";
if ([response statusCode] ==200 )
{
responseData = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSLog(@"---------responseData: %@",responseData);
return responseData;
} else {
最佳答案
您没有保存 stringByAddingPercentEscapesUsingEncoding
的结果。所以,而不是:
[get stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
你需要:
get = [get stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
仅供引用,虽然上述修复现在可以成功地对 URL 中不允许出现的所有字符进行百分比转义,但实际上有些字符在 URL 中是可以接受的,但在参数值中是 Not Acceptable (例如 +
解释为空格,或 &
描述参数)。
对请求参数中使用的值进行百分比转义很重要,这样您不仅可以转义 URL 中不合法的字符,还可以转义 URL 中合法的一些字符,但参数值内不允许。
不幸的是,标准的 stringByAddingPercentEscapesUsingEncoding
方法不执行此操作。但是 CFURL
函数 CFURLCreateStringByAddingPercentEscapes
可以。您将此函数应用于各个参数值。下面是一个在这个函数和 ARC 之间执行必要的免费电话桥接的方法:
- (NSString *)percentEscapeString:(NSString *)string
{
NSString *result = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)string,
(CFStringRef)@" ",
(CFStringRef)@":/?@!$&'()*+,;=",
kCFStringEncodingUTF8));
return [result stringByReplacingOccurrencesOfString:@" " withString:@"+"];
}
您可以按如下方式使用此方法:
NSString *get =[[NSString alloc] initWithFormat:@"mobileNumber=%@&deviceToken=%@", [self percentEscapeString:myMobileNumber], [self percentEscapeString:myDeviceToken]];
NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"http://myHomepage.net/login.php?%@",get]];
无论这些保留字符是否存在,这都应该正确地对字符串的参数值进行百分比转义。
关于ios - 错误域=NSURLErrorDomain 代码=-1000 "bad URL",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23792986/