一般是訪問https時才出現“508 Loop Detected”,idhttp+IdSSLIOHandlerSocketOpenSSL,這個在上篇文章中講過了。 由於該問題網上資料極少,連外文資料也沒卵用,起初我也以為是idhttp的重定向設置問題,但確認過沒設置錯。 不過相比https,http ...
一般是訪問https時才出現“508 Loop Detected”,idhttp+IdSSLIOHandlerSocketOpenSSL,這個在上篇文章中講過了。
由於該問題網上資料極少,連外文資料也沒卵用,起初我也以為是idhttp的重定向設置問題,但確認過沒設置錯。
idHttp.HandleRedirects := True;
不過相比https,http的話不會出現這個問題,這就很奇怪了,繼續測試...
那麼發現,訪問普通的https是有返回數據的並且沒有報“508 Loop Detected”錯誤,這說明我的代碼與控制項是沒錯誤的。
而這條地址(具體URL就不公佈了)用瀏覽器訪問、抓包是有返回數據的,但問題出在哪了?
然後打開一個我早年寫的https調試工具去訪問這個地址,居然正常,暈了,都是我寫的可獨立調用http庫,怎麼會有這種問題,開始比較源碼......
看了N遍,幾乎沒任何問題,可就是一個報錯,一個不報錯,突然間想到了一個可能存在問題的地方,就是調試工具中允許自定義UserAgent,立馬將其預設內容賦給出問題的軟體,
idHttp.Request.UserAgent := 'Mozilla/5.0 (MSIE 6.0;Windows NT 6.1; rv:23.0) Chrome/53.0.2785.104 Safari/537.36 QQBrowser/9.6.10872.400';
放鞭炮!哥解決了,原來是我曾更新過UserAgent,而剛巧這個https地址最近又升級了,嚴格控制了對用戶的訪問瀏覽器類型與版本的要求,反而導致我們這種模擬不嚴謹的idhttp請求不到數據。
而在UserAgent的設置中,還可以有很多瀏覽器信息比如Firefox、AppleWebKit等等,但是UserAgent中一定一定要有MSIE 6.0,也就是微軟的IE瀏覽器,我也測試過IE其他版本信息,發現丟包情況比較頻繁,而6.0幾乎不丟,說明服務商對低版本的IE相容還是最穩定的。