【发布时间】:2021-12-18 02:01:39
【问题描述】:
我知道 HttpWebRequest 有一个参数可用于将 URL 重定向设置为 false (request.AllowAutoRedirect = False;)。
直接使用Socket连接是怎么做到的?
我没有任何代码可显示,因为我刚刚开始开发项目。
不幸的是,我需要坚持使用 Socket 连接,不能使用 HttpWebRequest、WebClient 或 HTTPClient。 :(
【问题讨论】:
-
为什么不能使用它们?您没有连接到 HTTP 服务吗?如果没有,您使用的是什么协议?
-
我正在构建一个视频流应用程序,而其他选项对于连接来说太慢了。使用套接字时,应用程序运行良好,任何其他类型都有延迟。使用套接字时是否有设置此参数的参数? HTTPWebRequest是使用sockets的,所以一定是可以的,有谁知道代码长什么样子或者用什么参数?
-
重定向是一个应用程序协议(例如 HTTP)问题。您使用套接字直接访问传输协议 (TCP),并在其上编写应用程序协议。如果您收到一个说要去其他地方的响应,您关闭套接字,打开另一个主机的新套接字,然后在那里重试。 HTTP 重定向可以指向同一主机上的资源,因此这些客户端可能会保持套接字打开。
-
感谢 madreflection 的详细信息!奇怪的是,我刚刚做了一些测试,当我通过 HTTPWebRequest(AllowAutoRedirect 设置为 false)发送一个特定的 URL 时,我得到一个 302 响应,并且重定向的 URL 显示在位置标题下。当我在套接字连接上做同样的事情时,我得到一个超时,我得到一个 408 超时响应。你可能已经确定了,重定向到另一个主机。明白了,我需要为这个新主机创建另一个套接字!完美,谢谢各位!! :)
-
408 是“请求超时”,这意味着您还没有发送完整的请求,服务器已经厌倦了等待。您根本没有获得重定向。您应该返回使用其他类型之一。它们本质上并不慢。我假设您没有正确使用它们来进行有效的沟通。使用提供的 Web 客户端类型之一显示一些代码,并获得帮助以确定您需要在那里修复什么。