SOCKS 代理 和 HTTP 代理, WebSocket

ops/2024/9/19 0:49:53/ 标签: websocket, 网络协议

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/UDPHTTP
工作原理网络连接隧道HTTP 请求转发
透明性透明非透明
安全性依赖底层网络连接的安全性通常提供身份验证和加密
应用场景各种网络应用,例如 HTTP、HTTPS、FTP、SSH 等主要用于 HTTP 请求

1. HTTP 代理

协议: HTTP 协议
解析出的地址和端口: 通常是代理服务器的 IP 地址和端口号。
连接方式: OkHttp 使用 HTTP 协议向代理服务器发送请求,请求中包含目标服务器的地址和端口号。代理服务器收到请求后,会将请求转发给目标服务器,并接收目标服务器的响应,再将响应转发给客户端。
举例:

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

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

  • 连接流程:

OkHttp 向 proxy.example.com:8080 发送一个 HTTP 请求,请求中包含目标服务器 www.example.com 的地址和端口号。
代理服务器收到请求后,会将请求转发给 www.example.com。
www.example.com 返回响应给代理服务器。
代理服务器将响应转发给 OkHttp。
OkHttp 收到响应并处理。


2. SOCKS 代理

协议: SOCKS 协议 (通常是 SOCKS4 或 SOCKS5)
解析出的地址和端口: 通常是代理服务器的 IP 地址和端口号。
连接方式: OkHttp 使用 SOCKS 协议与代理服务器建立连接,并将目标服务器的地址和端口号传递给代理服务器。代理服务器负责将连接转发到目标服务器,并进行数据转发。
举例:

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

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

  • 连接流程:

OkHttp 使用 SOCKS5 协议与 proxy.example.com:1080 建立连接。
OkHttp 将 www.example.com 的地址和端口号传递给代理服务器。
代理服务器负责将连接转发到 www.example.com。
OkHttp 与 www.example.com 进行数据通信,所有数据都会通过代理服务器转发。

选择哪种代理:

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

总结:

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

MockWebServer模拟websocket server测试

example:

init {mockWebServer.start()sleep(1000)webSocketClient = WebSocketClient(mockWebServer.url("/").toString())}@Testfun 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()}
}

参考链接:

OKhttp深入理解--WebSocket的支持 · okhttpdocicon-default.png?t=N7T8https://seekting.gitbooks.io/okhttpdoc/content/gitbook/chapter13/content.html

medium.com--okhttp-in-androidicon-default.png?t=N7T8https://medium.com/@manuaravindpta/okhttp-in-android-4c2771141f79

Recipes - OkHttpA collection of common/useful code examples for Kotlin and Javaicon-default.png?t=N7T8https://square.github.io/okhttp/recipes/

HTTP 标头icon-default.png?t=N7T8https://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

WebSocketicon-default.png?t=N7T8https://square.github.io/okhttp/5.x/okhttp/okhttp3/-web-socket/index.html


http://www.ppmy.cn/ops/47656.html

相关文章

一维时间序列突变检测方法(小波等,MATLAB R2021B)

信号的突变点检测问题是指在生产实践中,反映各种系统工作状态的信号,可能因为受到不同类型的噪声或外界干扰而发生了信号突变,导致严重失真的信号出现,因此必须探测突变出现的起点和终点。研究目的在于设计出检测方案,…

安全风险 - 检测设备是否为模拟器

在很多安全机构的检测中,关于模拟器的运行环境一般也会做监听处理,有的可能允许执行但是会提示用户,有的可能直接禁止在模拟器上运行我方APP 如何判断当前 app 是运行在Android真机,还是运行在模拟器? 可能做 Framework 的朋友思…

k8s群集调度之 pod亲和 node亲和 标签指定

目录 一 调度约束 1.1K8S的 List-Watch 机制 ⭐⭐⭐⭐⭐ 1.1.1Pod 启动典型创建过程 二、调度过程 2.1Predicate(预选策略) 常见的算法 2.2priorities(优选策略)常见的算法 三、k8s将pod调度到指定node的方法 3.1指…

【C#】中托管与非托管对象区别、托管与非托管DLL区别

C 中的托管与非托管的区别_托管程序和非托管程序-CSDN博客 C# 中托管与非托管对象区别 在C#中,托管对象和非托管对象的主要区别在于内存管理和执行环境: 托管对象 (Managed Objects) 内存管理:托管对象的内存由.NET运行时(CLR…

植物大战僵尸杂交版2.0.88最新版+防闪退工具V2+修改工具+高清工具

植物大战僵尸杂交版,不仅继承原作的经典玩法,而且引入了全新的植物融合玩法,将各式各样的植物进行巧妙的杂交,孕育出前所未有、功能各异的全新植物。 创新的杂交合成系统 游戏引入了创新的杂交合成系统,让玩家可以将不…

跟着Nature学分析:R语言ggplot2包绘制高端组合图

数据和代码获取:请查看主页个人信息!!! 大家好,今天我将介绍高分杂志组合图绘制,图形来源于Nature的一篇文章: 该图展示了转录组多样性的主成分(PCs)与基因组&#xff08…

【全开源】在线题库微信小程序系统源码(ThinkPHP+FastAdmin+UniApp)

打造个性化学习平台 一、引言:在线学习的未来趋势 在数字化时代,线上学习已逐渐成为主流。随着移动互联网的普及,小程序以其轻便、快捷、无需安装的特点,成为用户日常学习的新选择。为了满足广大用户对于在线学习的需求&#xf…

大归纳!!教你使用<string.h>的字符函数与字符串函数!!☑

这篇博客为你归纳了所有的字符函数和最常用的字符串函数,以及对应的模拟实现!!你可以直接循着目录跳到你需要的段落哦!!😍 目录 字符函数 字符分类 字符判断函数 islower——判断小写字母 isupper——…

【Sklearn | 2】sklearn 高级教程

在上一篇基础教程中,我们介绍了 sklearn 的基础使用方法。本文将进一步深入,介绍一些高级功能和技巧,包括管道、特征工程、模型选择与评估、以及集成方法等。 管道(Pipeline) 在实际项目中,数据预处理和模…

jenkins应用2-freestyle-job

1.jenkins应用 1.jenkins构建的流程 1.使用git参数化构建,用标签区分版本 2.git 拉取gitlab远程仓库代码 3.maven打包项目 4.sonarqube经行代码质量检测 5.自定义制作镜像发送到远程仓库harbor 6.在远程服务器上拉取代码启动容器 这个是构建的整个过程和步骤…

json和axion结合

目录 java中使用JSON对象 在pom.xml中导入依赖 使用 public static String toJSONString(Object object)把自定义对象变成JSON对象 json和axios综合案例 使用的过滤器 前端代码 响应和请求都是普通字符串 和 请求时普通字符串,响应是json字符串 响应的数据是…

Java基础27,28(多线程,ThreadMethod ,线程安全问题,线程状态,线程池)

目录 一、多线程 1. 概述 2. 进程与线程 2.1 程序 2.2 进程 2.3 线程 2.4 进程与线程的区别 3. 线程基本概念 4.并发与并行 5. 线程的创建方式 方式一:继承Thread类 方式二:实现Runable接口 方式三:实现Callable接口 方式四&…

从功能性磁共振成像(fMRI)数据重建音频

听觉是人类最重要的感官之一,它负责接收外部的听觉刺激,并将这些信息传递给大脑进行处理和理解。研究人员正致力于从神经科学和计算机科学两个领域探索人脑的听觉感知机制。一个关键目标是从人脑中解码神经信息,并重建原始的刺激。常见的大脑…

【scikit-learn010】sklearn算法模型清单实战及经验总结(已更新)

1.一直以来想写下基于scikit-learn训练AI算法的系列文章,作为较火的机器学习框架,也是日常项目开发中常用的一款工具,最近刚好挤时间梳理、总结下这块儿的知识体系。 2.熟悉、梳理、总结下scikit-learn框架模型算法包相关技术点及经验。 3.欢迎批评指正,欢迎互三,跪谢一键…

ChatGPT-4o抢先体验

速度很快,结果很智能,支持多模态输入输出,感兴趣联系作者。 windows/linux/mac 客户端下载参考:https://github.com/lencx/Noi

前端Ajax、Axios和Fetch的用法和区别笔记

前端 JavaScript 开发中,进行 HTTP 请求的三种主要方式是 Ajax、Axios 和 Fetch。这三种方式各有优缺点,并且适用于不同的场景。在合适的业务场景下使用,以下是它们的区别和使用举例。 1. Ajax Ajax(Asynchronous JavaScript an…

【Android】PopupWindow焦点控制方式解析

touchable 指定pop是否可触摸 当设置为false时,pop的所有触摸事件会直接传到下方Window,pop会关闭 focusable 指定pop是否可获得焦点 当设置为true时,如果pop中包含可获取焦点的控件,旧的Window会自动失去焦点 另外&#xf…

文件编码概念

文件的读取 open()函数: 打开一个已存在的文件,或者创建一个新文件 open(name,mode,encoding) name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径) mode:设置打开文件的模式(访问模式)&am…

03-3.1.1 栈的基本概念

👋 Hi, I’m Beast Cheng👀 I’m interested in photography, hiking, landscape…🌱 I’m currently learning python, javascript, kotlin…📫 How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以订…

App UI 风格,引领时尚

App UI 风格,引领时尚