我正在构建一个小型REST服务来授权用户访问我的应用程序。
有一次,我用来授权用户的UIWebView将转到https://myautholink.com/login.php。此页面使用授权令牌发送JSON响应。关于这个页面的事情是它通过我的授权表格通过GET接收一些数据。我无法使用PHP会话,因为您通过以下方式访问此页面:
header("location:https://myautholink.com/login.php?user_id=1&machine_id=machine_id&machine_name=machine_name&app_id=app_id");
由于标题函数在标题中发送,我无法同时执行session_start();
。
我可以使用委托方法获取UIWebView的请求URL而不会出现问题:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSURLRequest *request = [webView request];
NSLog(@"%@", [[request URL] relativeString]);
if([[[request URL] absoluteString] isEqualToString:SPAtajosLoginLink])
{
//Store auth token and dismiss auth web view.
}
}
事情是没有NSURL方法似乎没有参数返回“干净”链接。我查看了所有与NSURL url-string相关的方法:
- (NSString *)absoluteString;
- (NSString *)relativeString; // The relative portion of a URL. If baseURL is nil, or if the receiver is itself absolute, this is the same as absoluteString
但是absoluteString总是带有GET参数的完整URL,而relativeString总是为零。
我正在摸不着头脑,我似乎无法找到解决方案。任何帮助将不胜感激。
答案 0 :(得分:11)
不要乱用自己的字符串操作,切换到NSURLComponents
:
NSURLComponents *components = [NSURLComponents componentsWithURL:url];
components.query = nil; // remove the query
components.fragments = nil; // probably want to strip this too for good measure
url = [components URL];
在iOS 6及更早版本中,您可以引入KSURLComponents
以获得相同的结果。
答案 1 :(得分:5)
示例:http://www.google.com:80/a/b/c;params?m=n&o=p#fragment
使用NSURL的这些方法:
scheme: http
host: www.google.com
port: 80
path: /a/b/c
relativePath: /a/b/c
parameterString: params
query: m=n&o=p
fragment: fragment
或者,在iOS 7中,构建一个NSURLComponents实例,然后使用方法scheme,user,password,host,port,path,query,fragment,将URL的一部分提取出来。然后重新构建基本URL。
NSString* baseURLString = [NSString stringWithFormat:@"%@://%@/%@", URL.scheme, ...
NSURL *baseURL = [NSURL URLWithString:baseURLString];
答案 2 :(得分:5)
要更新iOS 7以后的答案:
NSURLComponents *components = [NSURLComponents componentsWithURL: url resolvingAgainstBaseURL: NO];
components.query = nil; // remove the query
components.fragment = nil; // probably want to strip this too for good measure
url = [components URL];
请注意,没有'片段'属性。它只是片段'。
否则,这种方法很棒。比担心用URL字符串正确地将URL重新组合在一起要好得多。