gpt4 book ai didi

c# - 使用来自 HTTPS 的 system.net.socket 检查接收到的数据

转载 作者:太空宇宙 更新时间:2023-11-03 10:31:48 27 4
gpt4 key购买 nike

我有一个 Windows 应用程序,它通过 system.net.socket 监听 9002 端口。

如果客户端像这样通过 http url 发送请求:

http://localhost:9002/projectName/doSomething

然后在我的 ReceiveCallBack 方法中接收到的数据是:

POST /projectName/doSomething HTTP/ 1.1
Accept: * / *
Origin: http://localhost
Accept-Language: tr-TR
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko
Host: localhost:9002

但是如果他们通过 https url 发送请求,您可以在下面看到:

https://localhost:9002/projectName/doSomething

然后接收到的数据是这样的:

\0?\0\0?U:vv?W?????????T??k#?=??? v\tci\0\0,?(?'??\0=\0<\05\

我尝试使用 UTF8 编码将此数据转换为可读格式,并在 Internet 上搜索但找不到解决方案。

通过 HTTPS 请求接收可读数据的方式是什么?

谢谢

最佳答案

实际上,我在没有使用任何 WCF 或 HttpListener 的情况下从套接字开始用 C# 编写了一个 Web 服务器和 SOAP 堆栈,并且不得不处理添加 https 支持的问题。代码其实比较简单。

您首先需要通过 NetworkStream 适配器从 Socket 构造一个 SslStream

var sslStream = new SslStream(new NetworkStream(socket));

然后是困难的部分:您需要AuthenticateAsServer,这要求您有一个X509Certificate 和相应的私钥,来自颁发者连接客户端信任,包含与 https URL 的主机部分匹配的主题名称。 (这是困难的部分,因为除非您拥有连接的双方,否则您无法通过编码摆脱它 - 这是浏览器等客户端知道网站是否合法的方式。)

sslStream.AuthenticateAsServer(serverCertificate);

最后,您可以从 sslStream 中读取并获取实际的、未加密的 HTTP 请求。

关于c# - 使用来自 HTTPS 的 system.net.socket 检查接收到的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29853546/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com