Anglesharp context.openAsync() returns 无法识别的字符。我能做什么?
Anglesharp context.openAsync() returns unrecognized character. What can I do?
我正在使用 AngleSharp 来 "open" 一个 URL,更改 input
的 value
属性,然后提交 form
.
但是当我从 URL 获得 HTML 代码时,我在 input
的 name
属性中得到一个无法识别的字符,这让我很感兴趣。参见:
<!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
,因此我可以通过它的其他属性作为选择器来 "catch" 它(以更改 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/)
我认识创建此 Web 界面的人,他告诉我他错误地使用了希腊语 A
,他无法更改它(我会解释原因)。
所以,既然我知道服务器期望什么,我想我也可以设置 name
属性,然后发送表单。但是当我这样做时,它不会被识别,因为我在 Wireshark 中检查时,该字符与您提交表单时浏览器发送的字符不同。 (我在运气不好的情况下努力设置正确的名称)。
我还认为这可能是某种编码问题,但我没有设法在 context
配置中设置编码。在获得 HTML 之前,我将文化设置为 "el-GR",但没有任何改变。
我能做什么?你有什么建议吗?
PS。这是一个由微控制器托管的低安全性 Web 界面。 HTML 无法更改,因为设备已经获得认证。此外,该界面在浏览器中使用时效果完美。
我必须创建一个 class Implements
IEncodingProvider
接口,然后通过用方法。
这是 class:
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 的指导!
我正在使用 AngleSharp 来 "open" 一个 URL,更改 input
的 value
属性,然后提交 form
.
但是当我从 URL 获得 HTML 代码时,我在 input
的 name
属性中得到一个无法识别的字符,这让我很感兴趣。参见:
<!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
,因此我可以通过它的其他属性作为选择器来 "catch" 它(以更改 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/)
我认识创建此 Web 界面的人,他告诉我他错误地使用了希腊语 A
,他无法更改它(我会解释原因)。
所以,既然我知道服务器期望什么,我想我也可以设置 name
属性,然后发送表单。但是当我这样做时,它不会被识别,因为我在 Wireshark 中检查时,该字符与您提交表单时浏览器发送的字符不同。 (我在运气不好的情况下努力设置正确的名称)。
我还认为这可能是某种编码问题,但我没有设法在 context
配置中设置编码。在获得 HTML 之前,我将文化设置为 "el-GR",但没有任何改变。
我能做什么?你有什么建议吗?
PS。这是一个由微控制器托管的低安全性 Web 界面。 HTML 无法更改,因为设备已经获得认证。此外,该界面在浏览器中使用时效果完美。
我必须创建一个 class Implements
IEncodingProvider
接口,然后通过用方法。
这是 class:
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 的指导!