ios - 错误域=NSURLErrorDomain 代码=-1000 "bad URL"

标签 ios http request send

以下问题: 我每次都会收到错误 -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/

相关文章:

ios 我可以使用 MPMoviePlayerController 播放 .mp3 url

Django REST Framework - 如何加密 PUT 和 PATCH 中的密码?

php - 使用友好的 URL 提交 CakePHP 表单

node.js - request.js - cookie 创建

ios - 将 ios 应用程序分发到选定的设备,而无需为开发人员计划付费

ios - 关于苹果证书和分发

mysql - 需要将 3 个 sql 请求合并为一个

ios - 请求服务器 iOS Swift 3 的 void 函数中出现意外的非 void 返回值

ios - 如何在 UILocalnotification 中分配自定义时间?

java - RequestDispatcher 和路径