2012-05-11 128 views
3

我想從服務器(aspx)獲得html響應。如何使用請求中的參數處理重定向url?

NSString *urlstr = [[NSString alloc] initWithFormat:@"http://www.someSiteThatRedirectsWithGetParameters.com?parameter1=1&parameter2=2"]; 

NSURL *url = [ NSURL URLWithString:urlstr];  
NSMutableURLRequest *urlRequest = [ NSURLRequest requestWithURL: url]; 

NSData data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error]; 

NSURL *lastURL=[response URL]; 

NSLog(@"Last url %@", lastURL); 

我得到最後URL作爲www.someSiteThatRedirectsWithGetParameters.com,因此沒有得到對原請求的URL的HTML頁面。

爲什麼這樣,我該如何解決這個問題?

編輯

這一切是我迄今爲止嘗試:Get the last redirected url in iOS 5? 但我還是沒能實現什麼,我想,即:把原來的GET請求的HTML頁面的源代碼(會通過重定向)在url中有參數?

+0

期望參數的站點不應該重定向...也最好使用post-requests,這樣人們就不會那麼容易找出你發送的內容。 – Martol1ni

+0

我不是一個運行網站,所以不能控制一個網站應該或不應該做什麼,我是發送請求的人,因此問題! –

+0

查看我的最新帖子。 – Martol1ni

回答

0

我會嘗試發送兩個請求的方法。發送第一個請求,那麼redirectURL將成爲響應。然後創建一個新的URL響應,並使用GET參數向該URL發送請求。我沒有嘗試過,但我想它可以工作。

1

我得到最後URL作爲www.someSiteThatRedirectsWithGetParameters.com ,因此沒有得到原始的HTML頁面請求的URL 。

如果您的請求被重定向,這是因爲您要連接的服務器告訴您,首次發出請求的URL沒有頁面,您應該使用重定向的URL 。這是重定向響應的重點。

如果您收到的回覆是HTTP 303,則新請求將正確從POST更改爲GET。有時這樣做是爲了避免刷新頁面會重新提交原始請求而導致不良後果的情況。在這種情況下,您將請求發佈到某個URL,並且服務器接受請求,但通過將客戶端重定向到最終顯示服務器響應的其他URL來響應。

爲什麼這樣,我該如何解決這個問題?

我已經解釋了上面的'爲什麼'。 「解決方案」是接受來自服務器的響應,並遵循重定向到包含服務器響應的URL。

+0

什麼令人困惑的是,當我在網絡瀏覽器中使用原始請求時,所請求的頁面確實會被加載,但是當我使用代碼獲取html數據時也是如此:( –

+0

檢查此鏈接:http:// www .bookfinder4u.com/IsbnSearch.aspx?isbn = 0755315316&mode = direct&option = all&country = usa這就是我提到的其中一個。當您通過瀏覽器打開該鏈接時,您會看到搜索頁面,但是當您請求使用相同的頁面時同步/異步http請求,你會得到的數據將是主頁(http://bookfinder4u.com) –

+0

然後,你需要看看你發送的請求和瀏覽器的請求發送它們看看它們之間有什麼不同,這可能會幫助您找出服務器響應不同的原因。這可能是因爲服務器無法識別您要發送的用戶代理,或者瀏覽器不喜歡您的請求中包含(或未包含)的其他頭文件。像[Charles proxy](http://www.charlesproxy.com/)這樣的工具在這些情況下是非常寶貴的。 – Caleb