2011-03-20 60 views
1

所以我正在嘗試讀取HTML文件的內容以從特定網站上刪除某些元數據。在可可模仿瀏覽器中發出HTTP請求

但是我遇到的問題是,使用可可庫調用在objective-c中執行HTTP請求會給我一個不同的HTML文件,然後當我通過Web瀏覽器或我執行的python調用執行調用時。

這是令人討厭的原因是我颳了一個在每個請求上生成的密鑰。該網站似乎知道,當我通過可可而不是從python庫或從瀏覽器執行請求時。

任何人都可以對此有所瞭解嗎?

這裏是下面的Python代碼執行我:

self.url = 'http://sample-site.com/1?ax=1ts=123123.12' 
request = urllib2.Request(complete_url) 
response = urllib2.urlopen(request) 
html_data = response.read() 

這裏是下面的可可嘗試我試過:

  1. NSString * completeUrl = [url stringByAppendingFormat:@"//%d?ax=1&ts=%1.2f", pageNumber, time];

  2. 的另一種嘗試:

    NSMutableURLRequest* request = [[[NSMutableURLRequest alloc] initWithURL:hypeURL] autorelease]; 
        [request setValue:userAgent forHTTPHeaderField:@"User-Agent"]; 
        NSURLResponse* response = nil; 
        NSError* error = nil; 
        NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
        NSString *hypeHTML = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 
    

可可的嘗試正在檢索HTML,但HTML包含的關鍵值我分析了每次刷新時生成的關鍵值。然而,在使用cocoa執行請求時,每次執行應用程序時鍵值都不會改變(HTML中的鍵值相同),在Python中,HTML正確地爲每個請求使用不同的鍵。

感謝

+0

請看看這篇博客我寫的描述了這個問題:http://www.fzakaria.com/2011/03/hypemachine-cocoa-woes/ – Setheron 2011-03-23 18:30:53

回答

3

網站可能檢測到用戶代理和返回基於其不同的內容。
簡單地改變用戶代理在請求頭:

NSString* userAgent = @"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8) Gecko/20051111 Firefox/1.5 BAVM/1.0.0"; 
NSURL* url = [NSURL URLWithString:@"http://www.stackoverflow.com/"]; 
NSMutableURLRequest* request = [[[NSMutableURLRequest alloc] initWithURL:url] autorelease]; 
[request setValue:userAgent forHTTPHeaderField:@"User-Agent"]; 
NSURLResponse* response = nil; 
NSError* error = nil; 
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
NSString *result = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 
NSLog(@"%@",result); 

有了這個代碼,服務器認爲你是在Linux :)

獲取當前用戶代理/查找運行Firefox用戶代理爲特定的瀏覽器:
http://www.useragentstring.com/

+0

不似乎已經做到了......他們有沒有其他的方法可以搞清楚? – Setheron 2011-03-21 00:27:18

+0

除了一些特定的JavaScript/AJAX技巧之外,服務器沒有其他方式來檢測瀏覽器。上面的代碼應該正常工作。也許該網站使用AJAX來更新頁面?在這種情況下,NSURLConnection返回的東西當然不同於瀏覽器中的「查看源代碼」選項。 – Anne 2011-03-21 17:25:49

+0

他們正在使用Ajax更新頁面。那麼NSURLConnection會檢索那麼什麼呢?因爲它仍然正確地解析頁面(我爲源代碼中的特定標識符(例如id,key等)進行regexing。)。我將使用更全面的信息編輯我的原始文章 – Setheron 2011-03-21 18:06:09

相關問題