如何指定URL的查询组件?

时间:2016-03-14 06:10:42

标签: ios objective-c nsurl

假设我有一个像:

这样的网址
NSString *urlString = @"https://mail.google.com";

我想指定此URL的查询组件,所以我这样做了:

NSURLComponents *components = [[NSURLComponents alloc] initWithString:urlString];
[components setQuery:@"guid=56d962c7e4b0b00655a669a2"];
NSLog(@"%@",urlString);
NSLog(@"%@", components.query);

第一个日志显示https://mail.google.com,这不是我想要的,但第二个日志显示guid=56d962c7e4b0b00655a669a2。我不明白第一个日志的输出,如果第二个日志显示添加了查询组件,为什么第一个日志不打印呢?我真正想做的是对URL https://mail.google.com?guid=56d962c7e4b0b00655a669a2进行NSMutableRequest,但是当我在上面的代码之后执行该操作并记录NSMutableRequest的结果时,它表示缺少必需的参数。我如何处理这个问题。任何帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:0)

如果要从NSURLComponents获取URL,请使用NSURLComponents的“URL”属性。

NSString *urlString = @"https://mail.google.com";
NSURLComponents *components = [[NSURLComponents alloc] initWithString:urlString];
[components setQuery:@"guid=56d962c7e4b0b00655a669a2"];
NSLog(@"%@", components.URL); // Should log: "https://mail.google.com?guid=56d962c7e4b0b00655a669a2"
NSLog(@"%@", components.query);

NSURL *url = components.URL;

或者,您可以将queryString附加到字符串的末尾,然后将整个内容转换为NSURL:

NSString *queryString = @"?guid=56d962c7e4b0b00655a669a2";
NSString *urlString = [@"https://mail.google.com" stringByAppendingString:queryString];
NSURL *url = [NSURL URLWithString:urlString];
NSLog(@"%@", url.absoluteString);

答案 1 :(得分:0)

你为什么不这样试试?

NSString *query = @"guid=56d962c7e4b0b00655a669a2"
NSString *urlString = [NSString stringWithFormat:@"https://mail.google.com?%@",query];
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];

因此,每次要更改查询时,都可以更改查询字符串,然后请求也会更改。