And*_*nez 2 nsurl uiwebview nsurlrequest ios ios7
我正在构建一个小型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");
Run Code Online (Sandbox Code Playgroud)
由于标题函数在标题中发送,我不能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.
}
}
Run Code Online (Sandbox Code Playgroud)
事情是没有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
Run Code Online (Sandbox Code Playgroud)
但是absoluteString总是带有GET参数的完整URL,而relativeString总是为零.
我正在摸不着头脑,我似乎无法找到解决方案.任何帮助将不胜感激.
Mik*_*lah 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];
Run Code Online (Sandbox Code Playgroud)
在iOS 6及更早版本中,您可以引入KSURLComponents
以获得相同的结果.
示例: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
Run Code Online (Sandbox Code Playgroud)
或者,在iOS 7中,构建一个NSURLComponents实例,然后使用方法scheme,用户,密码,主机,端口,路径,查询,片段,将URL的一部分提取出来.然后重新构建基本URL.
NSString* baseURLString = [NSString stringWithFormat:@"%@://%@/%@", URL.scheme, ...
NSURL *baseURL = [NSURL URLWithString:baseURLString];
Run Code Online (Sandbox Code Playgroud)
要为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];
Run Code Online (Sandbox Code Playgroud)
请注意,没有'碎片'属性.这只是'片段'.
否则,这种方法很棒.比担心使用字符串manips将URL正确地重新组合要好得多.
归档时间: |
|
查看次数: |
5359 次 |
最近记录: |