2017-04-06 61 views
0

我正在使用AngleSharp「打開」URL,更改inputvalue屬性,然後提交formAnglesharp context.openAsync()返回無法識別的字符。我能做什麼?

但是當我從URL獲取HTML代碼時,我在inputname屬性中得到了一個無法識別的字符,這讓我感興趣。請參閱:

<!DOCTYPE html> 
<html> 
<head></head> 
<body> 
<hr> 
<center>USER MENU<hr></center> 
<form method="post" name="input" enctype="text/plain"> 
<fieldset> 
<legend>ENTER USER CODE</legend> 
ENTER USER CODE: <input type="password" name="�00" maxlength="4"> 
<br> 
<button type="submit" formenctype="text/plain">SEND</button> 
</fieldset> 
</form> 
</body> 
</html> 

正如你可以看到這是在表單中的唯一input這樣我就可以「捕獲」它通過它的其他屬性選擇器(改變value)。就像這樣:[type=password]

context.Active.QuerySelector(Of IHtmlInputElement)("[type=password]").SetAttribute("value", "1111") 

那麼,問題是,當我提交表單,它有錯誤的名稱發送POST數據,他們不能得到認可。我通過在瀏覽器中打開這個URL來了解無法識別的字符,並使用Wireshark(獲取字符的十六進制值)仔細檢查它。

最後,焦炭在瀏覽器中源的觀點是希臘A和Wireshark的說,這是C1符號是Á與描述:Latin capital letter A with acute(見http://www.ascii-code.com/

我知道是誰創造了這個網站的人界面,他告訴我他用錯了希臘A,他不能改變它(我會解釋爲什麼)。

所以,現在我知道服務器的期望,我想我也可以設置name屬性,然後發送表單。但是當我這樣做的時候,既不會被識別,也不會因爲我在Wireshark中檢查而導致char與瀏覽器在提交表單時發送的char不同。 (我努力設定正確的名字,沒有運氣)。

我也認爲這可能是某種編碼問題,但我沒有設法在context配置中設置編碼。我在獲得HTML之前將文化設置爲「el-GR」,但沒有任何變化。

我該怎麼辦?你有什麼建議嗎?

PS。這是一個由微控制器託管的低安全性網頁界面。由於該設備已獲得認證,因此無法更改HTML。另外,該界面在瀏覽器中使用時效果很好。

回答

0

我必須創建一個類,ImplementsIEncodingProvider接口,然後通過with方法將此類的一個實例提供給Configuration構造函數。

這裏是類:

Private Class FixedEncodingProvider 
    Implements IEncodingProvider 

    Public Function Suggest(locale As String) As Encoding Implements IEncodingProvider.Suggest 
     Return Encoding.GetEncoding(1253) 
    End Function 
End Class 

,然後用它是這樣的:

Dim Config = Configuration.Default.WithDefaultLoader.With(New FixedEncodingProvider()) 
Dim context = BrowsingContext.[New](Config) 

特別感謝圖書館的創建者FlorianRappl的指導!

相關問題