如何确定C或Objective-C中的URL,URI和路径?

时间:2011-11-02 13:05:19

标签: objective-c c parsing url uri

在给定完整URL的情况下,我需要在C或Objective-C中使用一种方法来分隔URI和Path。

示例:

给定URL

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

获取URL很简单,但如何在C或Objective-C中确定URI的结束位置和路径的起始位置?

我知道URI是a11.l412923342423.c658546.g.lm.akamaistream.net,路径是D/13/414392/v0001/reflector:36751,但是如何以编程方式识别?

我无法弄明白,任何示例代码都会对我有所帮助。谢谢。

3 个答案:

答案 0 :(得分:3)

看起来//表示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;
}

修改 复制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

答案 1 :(得分:2)

可以在URL中查找第三个SLASH,甚至可以测试第一个和第二个SLASH是否连续。

答案 2 :(得分:2)

NSURL个对象上有很多属性可以提供URL的各个组件。你尝试过使用它们吗?