Как определить URL, URI и путь в C или Objective-C? - PullRequest
1 голос
/ 02 ноября 2011

Мне нужен способ в C или Objective-C, чтобы отделить URI и путь, учитывая полный URL.

Пример:

Учитывая URL

mms://a11.l412923342423.c658546.g.lm.akamaistream.net/D/13/414392/v0001/reflector:36751

Получить URL легко, но как я могу определить, где заканчивается URI и где начинается путь, в C или Objective-C?

Я знаю, что URI равен a11.l412923342423.c658546.g.lm.akamaistream.net, а путь - D/13/414392/v0001/reflector:36751, но как определить это программно?

Я не могу понять это, и любой пример кода очень поможет мне. Спасибо.

Ответы [ 3 ]

3 голосов
/ 02 ноября 2011

Похоже, // обозначает начало URI, а последующий / обозначает начало пути:

char *uri_start; // Start of URI
int uri_length;  // Length of URI
char *path_start; // Start of Path (until end of string)

uri_start = strstr(url, "//");
if (uri_start == NULL) { 
  uri_start = url;
} else {
  uri_start += 2; // skip "//"
}

path_start = strstr(uri_start, "/");

if (path_start == NULL) { 
  path_start = ""; // Path empty
  uri_length = strlen(uri_start);
} else {
  path_start += 1; // skip "/"
  uri_length = path_start - uri_start - 1;
}

Edit: Копирование URI:

char uri[300]; // or char *uri = malloc(uri_length + 1);
memcpy(uri, uri_start, uri_length); // Copy the uri
uri[uri_length] = '\0';  // nul-terminate the uri string

или (если это нормально, изменить исходную строку):

uri_start[uri_length] = '\0';  // nul-terminates the uri but alters the url
2 голосов
/ 02 ноября 2011

Существует множество свойств для NSURL объектов, которые предоставляют различные компоненты URL. Вы пробовали использовать их?

2 голосов
/ 02 ноября 2011

Можно найти третий слеш в URL-адресе и даже проверить, являются ли первые и вторые последовательными.

...