用python在服务器上开个可以输入帐号密码的代理服务器

在阿里云上ubuntu2404,已经有python环境了,但是运行

pip3 install proxy.py

会提示

你正在 Debian/Ubuntu 服务器 安装 proxy.py,系统启用了 PEP 668 保护机制 ,不允许 pip 直接写入系统包环境,因此出现:

复制代码
externally-managed-environment

解决方案有 3种,推荐第①或第②。


方案1:创建虚拟环境(最安全 & 官方推荐)

复制代码
apt update
apt install python3-venv -y   # 若未安装虚拟环境工具

创建运行目录并建 venv:

复制代码
mkdir /root/proxyserver
cd /root/proxyserver

python3 -m venv venv
source venv/bin/activate

环境切换成功提示类似:

复制代码
(venv) root@server:~#

安装代理:

复制代码
pip install proxy.py

启动带账号密码代理:

复制代码
proxy --hostname 0.0.0.0 --port 7890 --basic-auth admin:123456

👉 已可从外部连接,访问形式:

复制代码
http://admin:123456@服务器IP:7890

用python代码实现

复制代码
import subprocess

cmd = [
    "proxy",
    "--hostname", "0.0.0.0",
    "--port", "7890",
    "--basic-auth", "admin:123456"
]

subprocess.call(cmd)

在另外python中调用

复制代码
   proxy_user = "admin"
    proxy_pass = "123456"
    proxy_host = "服务器地址"
    proxy_port = "7890"

    proxies = {
        "http": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}",
        "https": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}",
    }

    r = requests.get(URL, params=params, headers=headers, timeout=10, proxies=proxies)

    r.raise_for_status()
    return r.json()

curl -x http://admin:123456@服务器IP:7890 https://www.baidu.com -I

bash命令行

复制代码
export http_proxy="http://admin:123456@服务器IP:7890"
export https_proxy="http://admin:123456@服务器IP:7890"

wget https://www.baidu.com -O -

cmd窗口

复制代码
set http_proxy="http://admin:123456@服务器IP:7890"
set https_proxy="http://admin:123456@服务器IP:7890"
wget https://www.baidu.com -O -

另外如果密码因为 URL 中 @ 和 & 是特殊符号,必须进行 URL 编码,否则 wget 会把它们当作分隔参数,导致认证失败或解析错误。

字符 URL编码
@ %40
& %26

你这串密码里包含多个需要 URL 编码 的特殊字符:

原密码:

复制代码
aa@123&^a:a

🔍 字符编码规则

字符 用途 是否必须编码 编码结果
@ 分隔用户与主机 必须 %40
& 参数连接符 必须 %26
^ Windows CMD 特殊符号 建议编码 %5E
: 分隔用户与密码 必须 %3A

✔ 正确 URL 编码后的密码:

复制代码
aa%40123%26%5Ea%3Aa

👉 完整代理 URL 写法示例

假设:

  • 用户名:admin

  • 密码:aa@123&^a:a

  • 服务器:服务器地址:7890

则应写为:

复制代码
http://admin:aa%40123%26%5Ea%3Aa@服务器地址:7890

🚀 wget 一行测试示例(Windows CMD 可用)

复制代码
wget --execute="http_proxy=http://admin:aa%40123%26%5Ea%3Aa@服务器地址:7890" ^
     --execute="https_proxy=http://admin:aa%40123%26%5Ea%3Aa@服务器地址:7890" ^
     https://www.baidu.com -O -

或仅测试连通性:

复制代码
wget --spider --execute="https_proxy=http://admin:aa%40123%26%5Ea%3Aa@服务器地址:7890" https://www.baidu.com

相关推荐
Sheep Shaun3 小时前
揭开Linux的隐藏约定:你的第一个文件描述符为什么是3?
linux·服务器·ubuntu·文件系统·缓冲区
野犬寒鸦3 小时前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习
迎仔3 小时前
06-存储设备运维进阶:算力中心的存储管家
运维
?re?ta?rd?ed?3 小时前
linux中的调度策略
linux·运维·服务器
全栈工程师修炼指南3 小时前
Nginx | stream content 阶段:TCP 协议四层反向代理浅析与实践
运维·网络·网络协议·tcp/ip·nginx
hweiyu003 小时前
Linux 命令:tr
linux·运维·服务器
Trouvaille ~3 小时前
【Linux】应用层协议设计实战(一):自定义协议与网络计算器
linux·运维·服务器·网络·c++·http·应用层协议
allway23 小时前
基于华为taishan200服务器、arm架构kunpeng920 cpu的虚拟化实战
linux·运维·服务器
Junlan273 小时前
Cursor使用入门及连接服务器方法(更新中)
服务器·人工智能·笔记
CSCN新手听安3 小时前
【linux】高级IO,I/O多路转接之poll,接口和原理讲解,poll版本的TCP服务器
linux·运维·服务器·c++·计算机网络·高级io·poll