2016-07-14 65 views
0

我已經成功登錄併發布數據,並使用idHttp.post()2個站點下載的數據的變化,但我有第三麻煩一個
在這個新的網站,登錄工作,但是當我嘗試下載一個文件(使用__doPostBack下載鏈接)我重定向到一個錯誤頁面
我有雙重和三重檢查所有發佈數據,他們酷似什麼HTTP分析表明我我注意到,唯一的區別是,在我的其他嘗試和網站,我成功地訪問,__視圖狀態是一樣的,每次的時間,它永遠不會改變,但在這第三個站點它與每個登錄改變(我的意思是當我去的時候現場手動和我檢查HTTP分析結果我可以看到__VIEWSTATE參數值的每個時間不同)
我應該怎麼辦?是改變__viewstate參數的問題?如果是的話,我該如何解決它?
我用張貼代碼:IdHttp:重定向嘗試下載文件時出錯頁面,__VIEWSTATE每次

try 
Response := TMemoryStream.Create; 
try 
    Request := TStringList.Create; 
    try 
    Request.Assign(TATDFileUtility.convertPairValueToRequestList(TATDFileUtility.extractPairValue('the site login parameters.txt', 3))); 
    IdHTTP := TIdHTTP.Create; 
    try 
     IdHTTP.AllowCookies := True; 
     IdHTTP.HandleRedirects := True; 
     IdHTTP.Request.ContentType := 'application/x-www-form-urlencoded'; 

     IdHTTP.Post('thesite, the address for the login and main page and download page is the same', Request, Response); 
     Response.SaveToFile('responseCode0.txt'); 

     Request.Clear; 
     Response.Clear; 
     Request.Assign(TATDFileUtility.convertPairValueToRequestList(TATDFileUtility.extractPairValue('httpDownloadParamters.txt', 3))); 
     IdHTTP.Post('thesite, the address for the login and main page and download page is the same', Request, Response); 
     Response.SaveToFile('responseCode1.txt'); 

,你可以檢查repsonsecode0後看,我可以看到,我登錄,但第二個響應代碼顯示了我的錯誤,並跟蹤它表明我是被重定向到錯誤頁面。

+1

你期望什麼?我們不知道哪個網站,我們沒有看到任何代碼,我們可以猜測。你說謊,你發送完全一樣 - 你不知道。您必須首先訪問登錄站點以獲取正確的__viewstate值。然後用此值登錄,然後再次檢查值是否已更改並使用新值。修復它很容易 - 只需發送正確的值。 – smooty86

+0

@ smooty86,出於隱私原因,我無法分享網站地址,但代碼如上所示。 –

+0

@ smooty86,如果我需要動態獲取__VIEWSTATE,我該怎麼辦呢?,我怎樣才能得到當前__VIEWSTATE值,這樣我可以給我的程序?,THX –

回答

1

視圖狀態是動態的。您首先需要GET定義<form>元素的HTML頁面,該頁面通常會在瀏覽器中提交回傳。這允許Web服務器生成當前的ViewState。然後解析HTML以提取<form>內的<input>元素的名稱和值(包括ViewState),然後您可以將POST這些值提取到<form>action屬性中指定的URL。這是網絡瀏覽器通常所做的事情,您需要使用TIdHTTP進行模擬。

+0

謝謝!確實的視圖狀態和其他參數還有後我使用GET,生病嘗試使用動態視圖狀態和虐待份額的結果,現在有一個問題,確實的內在要求列表此事參數的順序?,我的意思是viewstate是最後一個參數的例子嗎? –

+0

根據服務器的實施情況,順序可能無關緊要。 HTML規範指出,''值應該按照它們在HTML中聲明的順序提交。 –

+0

日誌記錄後,我使用GET,並使用TRegEx解析它,並添加__ViewState和__eventValidation,並沒有更多的錯誤頁面!它修復了它!但是,即使我沒有重定向到錯誤頁面,最後一次POST返回的響應代碼也不包含該文件!和它的一個html代碼非常像以前的步驟,我應該注意到我的登錄頁面,主頁和下載頁面是相同的地址 –