2012-08-08 66 views
1

如何在嵌入式UIWebView中設置HTTP referer?在UIWebView中指定HTTP referer

我已經通過this但仍沒有成功。

viewDidLoad,我寫了這個代碼,

[objWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"MY_URL"]]]; 

這裏是我的代碼:

- (BOOL) webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType) navigationType 
{ 
    NSDictionary *headers = [request allHTTPHeaderFields]; 
    BOOL hasReferer = [headers objectForKey:@"Referer"]!=nil; 
    if (hasReferer) { 
     // .. is this my referer? 
     return YES; 
    } else { 
     // relaunch with a modified request 
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       NSURL *url = [request URL]; 
       NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; 
       [request setHTTPMethod:@"GET"]; 
       [request setValue:@"Referer link" forHTTPHeaderField:@"Referer"]; 
       [objWebView loadRequest:request]; 
      }); 
     }); 
     return NO; 
    } 
} 

2.我試過這也viewDidLoad

NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"MY_URL"]]; 
[request setValue:@"Referel URL" forHTTPHeaderField:@"Referer"]; 
[objWebView loadRequest:request]; 

但是還沒有成功。

請幫我解決這個問題,或者告訴我這個代碼有沒有問題?

希望我明確提出了問題。

+0

您是否嘗試過直接修改傳遞給您的請求(而不是啓動新的請求)? – 2012-08-08 06:11:29

+0

值得注意的是,你依靠範圍來區分兩個不同的變量,這兩個變量都被稱爲'request'(一個塊可以訪問它的父範圍)。換句話說,你在範圍內有一個名爲'request'的變量,然後創建它的另一個版本。這不完全錯誤,但可以混淆,並降低可讀性/可維護性 – 2012-08-08 06:14:52

+0

@ctrahey請參閱我的更新的問題..可以請告訴我什麼是錯誤的,並給我任何建議,這個 – 2012-08-08 06:17:03

回答

3

您可以使用下面的代碼

NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"Safari/528.16", @"UserAgent", nil]; 
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary]; 

這是很好的解釋here默認的用戶代理設置。

+0

謝謝珍妮斯..它工作.. – 2012-08-09 04:17:06