0

我正在使用 AngleSharp 来“打开”一个 URL,更改valuean 的属性,input然后提交form.

但是当我从 URL 获取 HTML 代码时,我在我感兴趣的name属性中得到了一个无法识别的字符。input看:

<!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")

所以,问题是当我提交表单时,它发送的帖子数据名称错误,它们无法被识别。我通过在浏览器中打开此 URL 了解了无法识别的字符是什么,并使用 Wireshark 仔细检查它(以获取字符的 HEX 值)。

最后,charA在浏览器源代码视图中是希腊语,正如 Wireshark 所说,C1它是Á带有描述的符号:(Latin capital letter A with acute请参阅http://www.ascii-code.com/

我认识创建这个网络界面的人,他告诉我他使用了一个希腊语A是错误的,他无法更改它(我将解释原因)。

所以,既然我知道服务器期望什么,我想我也可以设置name属性然后发送表单。但是,当我这样做时,由于我在 Wireshark 中签入时,它并没有得到认可,因此该字符与您提交表单时浏览器发送的字符不同。(我努力设置正确的名称,但没有运气)。

我还认为这可能是某种编码问题,但我没有设法在context配置中设置编码。在获得 HTML 之前,我将文化设置为“el-GR”,但没有任何改变。

我能做些什么?你有什么建议吗?

PS。这是一个由微控制器托管的低安全性 Web 界面。无法更改 HTML,因为设备已获得认证。此外,该界面在浏览器中使用时可以完美运行。

4

1 回答 1

1

我必须创建一个接口类,Implements然后通过 with 方法IEncodingProvider 将此类的实例提供给构造函数。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 的指导!

于 2017-04-27T09:14:51.767 回答