2013-12-16 28 views
3

我知道可能存在一些與此相關的問題,但是當我嘗試爲我的UIWebView設置新的「用戶代理」時,我遇到問題。這裏就是我現在在做什麼:NSMutableURLRequest中的用戶代理未更改

NSURL *myUrl = [NSURL URLWithString:auxUrl]; 
    NSMutableURLRequest *myRequest = [NSMutableURLRequest requestWithURL:myUrl]; 

    NSMutableString *auxUserAgent = [[NSMutableString alloc] initWithString:[myRequest valueForHTTPHeaderField: @"User-Agent"]]; 
    [auxUserAgent appendString:@"(iOS)"]; 

    [myRequest setValue:auxUserAgent forHTTPHeaderField:@"User-Agent"]; 

    NSLog(@"UA : %@",[myRequest valueForHTTPHeaderField: @"User-Agent"]); 

我想追加一些文本,以實際的用戶代理,並在Xcode控制檯中它確實顯示新的用戶代理值。

2013年12月16日19:03:42.200應用[736:60B] UA:Mozilla的/ 5.0(iPhone; CPU iPhone OS 7_0_4,例如Mac OS X)爲AppleWebKit/537.51.1(KHTML,例如Gecko) Mobile/11B554a(iOS)

但是,當我運行我的應用程序時,它顯示了舊的。下面是我在UIWebView中顯示的網頁中顯示的用戶代理的屏幕截圖: ScreenShot

所以..我的問題是:我在想什麼?系統中是否存在不允許開發人員更改此數據的內容?

謝謝。

+2

如果您嘗試使用「@」User-Agent「'而不是'@」User_Agent「'會發生什麼? –

+0

正是你剛纔提到它改變它... –

+0

什麼都沒有發生......我在這個問題之前都試過了,而且我還是錯了......對不起。問題已經編輯!除此之外...它似乎像UIWebView以某種方式覆蓋用戶代理,因爲如果我發送任何其他頭參數一切似乎工作正常。 – VaroX

回答

6

我通過把在didFinishLaunchingWithOptionsAppDelegate.m下面的代碼「解決」我的問題:

NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:@"YOUR CUSTOM USER-AGENT", @"UserAgent", nil]; 
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary]; 

的事情是,我不能追加文本的用戶代理本身,但我可以編寫我需要的數據來區分從不同的應用程序或Web瀏覽器訪問網頁。

謝謝大家的幫助。

+0

酷!這似乎工作,但沒有記錄在任何地方,所以在生產代碼中使用可能有點危險...... –

+0

我知道!但我一直在閱讀,似乎只要你不在NSMutableURLRequest類中使用混合方法,一切都應該超過罰款......我想我們會看到會發生什麼! :)。 如果這種方法出現問題,我會讓你知道。謝謝伊萬。 – VaroX

+0

@VaroX已經讓你的應用程序進入商店了嗎?我和你的情況一樣,需要決定是否使用你的解決方法。所以我想知道這是否會通過審查:)非常感謝! – Toastor

2

它不會那樣工作。 UIWebView覆蓋User-Agent字段。

如果您嘗試登錄的User-AgentwebView:shouldStartLoadWithRequest:navigationType:方法,你會發現它已經覆蓋,但是你可以使用NSURLConnection用自定義User-Agent加載您的請求,然後使用loadHTMLString:baseURL:方法或loadData:MIMEType:textEncodingName:baseURL:方法從UIWebView到顯示從NSURLConnection下載的數據。

+0

嗨伊萬,首先,謝謝你的回答...但是,**我不會失去使用這種方法的導航歷史?? **如果是這樣,這'不是我的問題的解決方案,因爲有時我需要回到加載到UIWebView中的前一個網頁。 – VaroX

+0

嗨,你也需要自己管理它,但它會非常簡單。只需在控制器中創建一個屬性('NSArray'或'NSMutableArray')並在其中保存'NSURLRequest's。之後,您需要做的就是取消'webView:shouldStartLoadWithRequest:navigationType:'中的請求,並使用'NSURLConnection'加載您的'NSURLRequest'。 –