SOCKS 代理 和 HTTP 代理, && WebSocket

SOCKS 代理 和 HTTP 代理, && WebSocketSOCKS 代理更像是一个网络连接的中介 它支持各种协议 提供更高的透明性和灵活性 而 HTTP 代理则专用于处理 HTTP 请求 并提供了一些安全功能

大家好,欢迎来到IT知识分享网。

SOCKS 代理 和 HTTP 代理 的区别

SOCKS 代理 和 HTTP 代理 都是代理服务器,它们充当客户端和目标服务器之间的中介,但它们的工作方式和应用场景有所不同。

1. SOCKS 代理:

  • 工作原理: SOCKS 代理是一种更底层的代理,它只处理网络连接,并不解析 HTTP 请求。它就像一个“隧道”,将客户端的网络请求转发到目标服务器。
  • 支持协议: SOCKS 代理主要支持 TCP 和 UDP 协议,可以用于各种网络应用,例如 HTTP、HTTPS、FTP、SSH 等。
  • 透明性: SOCKS 代理对客户端和目标服务器是透明的,这意味着目标服务器不知道客户端的真实 IP 地址。
  • 安全性: SOCKS 代理本身不提供任何加密或身份验证,因此安全性依赖于底层网络连接的安全性。

代理地址示例:socks://proxy.example.com:1080

2. HTTP 代理:

  • 工作原理: HTTP 代理专门处理 HTTP 请求,它会解析 HTTP 请求并根据需要修改请求头和请求内容,然后将请求转发到目标服务器。
  • 支持协议: HTTP 代理只支持 HTTP 协议,只能用于处理 HTTP 请求。
  • 非透明性: HTTP 代理对目标服务器是不透明的,目标服务器可以获取客户端的真实 IP 地址。
  • 安全性: HTTP 代理通常提供一些安全功能,例如身份验证、加密等,以提高安全性。

代理地址示例:http://proxy.example.com:8080

两者的区别总结:

特性 SOCKS 代理 HTTP 代理
协议支持 TCP/UDP HTTP
工作原理 网络连接隧道 HTTP 请求转发
透明性 透明 非透明
安全性 依赖底层网络连接的安全性 通常提供身份验证和加密
应用场景 各种网络应用,例如 HTTP、HTTPS、FTP、SSH 等 主要用于 HTTP 请求

1. HTTP 代理

假设您要访问网站 www.example.com,使用 http://proxy.example.com:8080 作为 HTTP 代理服务器。

Proxy.Type.HTTP: OkHttp 会解析出 proxy.example.com 和 8080。

  • 连接流程:

假设您要访问网站 www.example.com,使用 socks://proxy.example.com:1080 作为 SOCKS5 代理服务器。

Proxy.Type.SOCKS: OkHttp 会解析出 proxy.example.com 和 1080。

  • 连接流程:

选择哪种代理:

  • 如果需要代理各种网络应用,例如 HTTP、HTTPS、FTP、SSH 等,可以选择 SOCKS 代理。
  • 如果只处理 HTTP 请求,并且需要一些安全功能,可以选择 HTTP 代理。

总结:

SOCKS 代理更像是一个网络连接的中介,它支持各种协议,提供更高的透明性和灵活性;而 HTTP 代理则专用于处理 HTTP 请求,并提供了一些安全功能。 选择哪种代理取决于你的具体需求。

MockWebServer模拟websocket server测试

example:

init { mockWebServer.start() sleep(1000) webSocketClient = WebSocketClient(mockWebServer.url("/").toString()) } @Test fun testWebSocketOrigin() { val webSocket = OkHttpClient().newWebSocket(Request.Builder().url(mockWebServer.url("/")).build(), clientListener) mockWebServer.enqueue(MockResponse().withWebSocketUpgrade(serverClientListener).setBody("first")) mockWebServer.enqueue(MockResponse().withWebSocketUpgrade(serverClientListener).setBody("second").setResponseCode(200)) mockWebServer.enqueue(MockResponse().withWebSocketUpgrade(serverClientListener).setBody("third").setResponseCode(200)) val message = "Hello from client!" webSocket.send(message) webSocket.send("client send twice") sleep(1000) webSocket.close(StatusCode.NORMAL_CLOSE.code, "normal close") }

Ktor – kotlin跨平台的网络通信组件

Ktor 的 HttpTimeout 插件并不直接适用于 WebSocket 连接。 

HttpTimeout 插件专为 HTTP 请求设计,主要用于设置请求超时和连接超时。

WebSocket 是一种持续的双向通信协议,不像 HTTP 请求那样具有明确的开始和结束。因此,HttpTimeout 的超时机制并不适用于 WebSocket 的持续连接。

为 WebSocket 设置超时,需要在代码层面上进行控制:

  1. 使用 kotlinx.coroutines 的 withTimeout 或 withTimeoutOrNull 函数:
import io.ktor.client.* import io.ktor.client.engine.cio.* import io.ktor.client.features.websocket.* import kotlinx.coroutines.* import kotlinx.coroutines.channels.* suspend fun main() { val client = HttpClient(CIO) { install(WebSockets) } val job = launch { try { client.webSocket(url = "ws://your-websocket-server.com") { // 在此处处理 WebSocket 连接 for (message in incoming) { println("收到消息: $message") } } } catch (e: Exception) { println("WebSocket 连接异常: ${e.message}") } finally { client.close() } } // 设置超时时间 withTimeout(3000L) { // 等待 WebSocket 连接成功 job.join() } if (job.isActive) { // 超时,取消 WebSocket 连接 job.cancel() } }

Android wss未加密连接问题解决:

AndroidManifest.xml app中增加配置:

android:usesCleartextTraffic=”true”

参考链接:

聊聊OkHttp实现WebSocket细节,包括鉴权和长连接保活及其原理!https://www.cnblogs.com/plokmju/p/okhttp_weisocket.html

OKhttp深入理解–WebSocket的支持 · okhttpdochttps://seekting.gitbooks.io/okhttpdoc/content/gitbook/chapter13/content.html

medium.com–okhttp-in-androidhttps://medium.com/@manuaravindpta/okhttp-in-android-4cf79

Recipes – OkHttpA collection of common/useful code examples for Kotlin and Javahttps://square.github.io/okhttp/recipes/

HTTP 标头https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers#%E9%80%90%E8%B7%B3%EF%BC%88hop-by-hop%EF%BC%89%E6%A0%87%E5%A4%B4

WebSockethttps://square.github.io/okhttp/5.x/okhttp/okhttp3/-web-socket/index.html

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/137118.html

(0)
上一篇 2025-06-22 20:33
下一篇 2025-06-22 20:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信