python request及pip命令挂代理后报错ValueError: check_hostname requires server_hostname的真正解决方法

article/2025/11/9 1:15:26

原答案地址

解决方法: Python 遭遇 ProxyError 问题记录
作者 DavyCloud

前言

C:\Users\Administrator>pip install dd
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
ERROR: Exception:
Traceback (most recent call last):File "D:\Anaconda3\lib\site-packages\pip\_internal\cli\base_command.py", line 173, in _mainstatus = self.run(options, args)File "D:\Anaconda3\lib\site-packages\pip\_internal\cli\req_command.py", line 203, in wrapperreturn func(self, options, args)File "D:\Anaconda3\lib\site-packages\pip\_internal\commands\install.py", line 315, in runrequirement_set = resolver.resolve(File "D:\Anaconda3\lib\site-packages\pip\_internal\resolution\resolvelib\resolver.py", line 94, in resolveresult = self._result = resolver.resolve(File "D:\Anaconda3\lib\site-packages\pip\_vendor\resolvelib\resolvers.py", line 472, in resolvestate = resolution.resolve(requirements, max_rounds=max_rounds)File "D:\Anaconda3\lib\site-packages\pip\_vendor\resolvelib\resolvers.py", line 341, in resolveself._add_to_criteria(self.state.criteria, r, parent=None)File "D:\Anaconda3\lib\site-packages\pip\_vendor\resolvelib\resolvers.py", line 172, in _add_to_criteriaif not criterion.candidates:File "D:\Anaconda3\lib\site-packages\pip\_vendor\resolvelib\structs.py", line 151, in __bool__return bool(self._sequence)File "D:\Anaconda3\lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 140, in __bool__return any(self)File "D:\Anaconda3\lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 128, in <genexpr>return (c for c in iterator if id(c) not in self._incompatible_ids)File "D:\Anaconda3\lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 29, in _iter_builtfor version, func in infos:File "D:\Anaconda3\lib\site-packages\pip\_internal\resolution\resolvelib\factory.py", line 272, in iter_index_candidate_infosresult = self._finder.find_best_candidate(File "D:\Anaconda3\lib\site-packages\pip\_internal\index\package_finder.py", line 851, in find_best_candidatecandidates = self.find_all_candidates(project_name)File "D:\Anaconda3\lib\site-packages\pip\_internal\index\package_finder.py", line 798, in find_all_candidatespage_candidates = list(page_candidates_it)File "D:\Anaconda3\lib\site-packages\pip\_internal\index\sources.py", line 134, in page_candidatesyield from self._candidates_from_page(self._link)File "D:\Anaconda3\lib\site-packages\pip\_internal\index\package_finder.py", line 758, in process_project_urlhtml_page = self._link_collector.fetch_page(project_url)File "D:\Anaconda3\lib\site-packages\pip\_internal\index\collector.py", line 490, in fetch_pagereturn _get_html_page(location, session=self.session)File "D:\Anaconda3\lib\site-packages\pip\_internal\index\collector.py", line 400, in _get_html_pageresp = _get_html_response(url, session=session)File "D:\Anaconda3\lib\site-packages\pip\_internal\index\collector.py", line 115, in _get_html_responseresp = session.get(File "D:\Anaconda3\lib\site-packages\pip\_vendor\requests\sessions.py", line 555, in getreturn self.request('GET', url, **kwargs)File "D:\Anaconda3\lib\site-packages\pip\_internal\network\session.py", line 454, in requestreturn super().request(method, url, *args, **kwargs)File "D:\Anaconda3\lib\site-packages\pip\_vendor\requests\sessions.py", line 542, in requestresp = self.send(prep, **send_kwargs)File "D:\Anaconda3\lib\site-packages\pip\_vendor\requests\sessions.py", line 655, in sendr = adapter.send(request, **kwargs)File "D:\Anaconda3\lib\site-packages\pip\_vendor\cachecontrol\adapter.py", line 53, in sendresp = super(CacheControlAdapter, self).send(request, **kw)File "D:\Anaconda3\lib\site-packages\pip\_vendor\requests\adapters.py", line 439, in sendresp = conn.urlopen(File "D:\Anaconda3\lib\site-packages\pip\_vendor\urllib3\connectionpool.py", line 696, in urlopenself._prepare_proxy(conn)File "D:\Anaconda3\lib\site-packages\pip\_vendor\urllib3\connectionpool.py", line 964, in _prepare_proxyconn.connect()File "D:\Anaconda3\lib\site-packages\pip\_vendor\urllib3\connection.py", line 359, in connectconn = self._connect_tls_proxy(hostname, conn)File "D:\Anaconda3\lib\site-packages\pip\_vendor\urllib3\connection.py", line 500, in _connect_tls_proxyreturn ssl_wrap_socket(File "D:\Anaconda3\lib\site-packages\pip\_vendor\urllib3\util\ssl_.py", line 453, in ssl_wrap_socketssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls)File "D:\Anaconda3\lib\site-packages\pip\_vendor\urllib3\util\ssl_.py", line 495, in _ssl_wrap_socket_implreturn ssl_context.wrap_socket(sock)File "D:\Anaconda3\lib\ssl.py", line 500, in wrap_socketreturn self.sslsocket_class._create(File "D:\Anaconda3\lib\ssl.py", line 997, in _createraise ValueError("check_hostname requires server_hostname")
ValueError: check_hostname requires server_hostname

之前用pip时下载module网速太慢,挂代理又报错,当时一头雾水,百度说关闭代理就行了,当时也没深究,换源下载安装了事。
最近闲下来,因为之前在别的电脑上使用pip挂代理访问一直都可以,还就想钻这个牛角尖,于是在网上搜了很多,有的说降级urllib,实测对pip无用,直到看到了这篇知乎,找到了根本原因。

原因总结

  • urllib 和 urllib3 不是一个库,前者是 Python 标准库自带。
  • 在代码中发现,当用户有传入 proxies 参数时,requests 是通过标准库提供的 getproxies 函数来获取系统代理服务器配置的:
# 如果是 python 2,则是 from urllib import getproxies 
>> from urllib.request import getproxies
>> getproxies(){'http': 'http://127.0.0.1:7890', 'https': 'https://127.0.0.1:7890', 'ftp': 'ftp://127.0.0.1:7890'}`
  • 在 Windows 系统中,先从环境变量获取,如果没有则从注册表获取。由于没有配置环境变量,自然结果是空,最终的结果要看 getproxies_registry
elif os.name == 'nt':def getproxies():"""Return a dictionary of scheme -> proxy server URL mappings.Returns settings gathered from the environment, if specified,or the registry."""return getproxies_environment() or getproxies_registry()

综上,原作者给出的方案是配置环境变量即可。

具体操作

  1. 先挂上代理
    在这里插入图片描述
  2. 获得本机代理端口
C:\Users\Administrator>python
Python 3.8.5 (default, Sep  3 2020, 21:29:08) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32Warning:
This Python interpreter is in a conda environment, but the environment has
not been activated.  Libraries may fail to load.  To activate this environment
please see https://conda.io/activationType "help", "copyright", "credits" or "license" for more information.
>>> from urllib.request import getproxies
>>> getproxies()
{'https': 'http://127.0.0.1:11000', 'http': 'http://127.0.0.1:11000'}
此处获得代理端口为11000
  1. 创建环境变量
    在这里插入图片描述
  2. 重启命令提示行,在挂代理的情况下使用pip验证成功

http://chatgpt.dhexx.cn/article/Ouo4jA7Q.shtml

相关文章

挂代理后git依然无法XXX

挂VPN/代理后git依然无法XXX 原因&#xff1a;代理对终端/git不起作用 办法&#xff1a;为git设置代理或者为终端设置代理&#xff0c;本文仅讲解对git设置代理的方法 基础知识 如果要对所有的仓库都设置代理&#xff0c;那么加--global选项&#xff0c;如果仅对某个仓库设置代…

python中使用splash如何挂代理?

我之前写过scrapy-splash挂代理的方式 这次应项目需求&#xff0c;没必要用scrapy做&#xff0c;只需要做一个动态获取指定网页的splash中间件即可。 但目标源有ip访问量检测。因此需要挂代理 那么…该如何挂上代理呢。 如下图&#xff1a; 昨天捣鼓这个挂代理的事情捣鼓了两个…

sqlmap的两种挂代理方式

文章目录 前言一、第一种方式直接挂代理二、第二种方式间接挂代理 前言 为什么要挂代理呢&#xff1a; sqlmap原理和暴力破解类似如果速度过快则会很容易被封ip&#xff0c;所以挂代理是避免这种情况的发生&#xff0c;即使发生也可以切换其他ip。 一、第一种方式直接挂代理 …

Windows通过SSH远程连接Linux

这里的”远程”操控的方法实际上也不是真正的远程.&#xff0c;這此操作方法主要是在一个局域网内远程操控电脑 (在一个路由器下)。可以把它做成在互联网中的远程操控, 不过技术难度上加了一个等级, 如果你想是想人在公司, 却要操控家里的 Linux, 可以参考免费的软件 (TeamView…

SSH连接linux(ubuntu)教程及常见问题

这篇文章&#xff0c;是用ssh连接一个刚刚安装好的ubuntu&#xff0c;所以会出现很多问题&#xff0c;我也总结了我自己遇到的全部问题&#xff0c;如果大家还遇到了什么别的问题&#xff0c;可以发给我&#xff0c;或者在评论区&#xff0c;发出来&#xff0c;大家一起解决&am…

Linux ssh远程连接

1.使用ssh客户端 问题 1)准备两台虚拟机A、B 2)主机A的IP地址为 192.168.8.128/24 3)主机B的IP地址为 192.168.8.15/24&#xff0c;与A可互通 4)完成以下远程访问操作 5)从主机A上以root身份登入主机B 6)在主机B上创建用户student&#xff0c;设置密码redhat 7)从主机A上以用…

cmd命令行ssh连接Linux服务器

打开cmd工具使用命令ssh连接服务器 ssh 用户名ip地址 &#xff08;不需要指定端口号&#xff0c;默认端口就是22&#xff09;输入密码即可

Windows下cmd命令行ssh连接Linux服务器

winR 输入 cmd 输入&#xff1a;ssh空格用户名ip地址&#xff0c;然后按Enter 输入 password &#xff0c;注意密码是不显示的&#xff0c;输入完&#xff0c;再按回车就行了 如果密码输入正确&#xff0c;则连接成功。

终端SSH连接linux

经常要用到终端连接虚拟机 1.netstat -lnt //查看是否开放22端口 2.修改内容vim /etc/ssh/sshd_config //进入ssh的配置文件 修改完成后按Esc &#xff0c;按&#xff1a;&#xff0c;输入wq保存修改并退出。 4./etc/init.d/ssh start //启动ssh服务 5./etc/init.d/ssh stat…

Ubuntu的ssh和sshd(远程连接)

ssh&#xff1a;secure shell安全外壳协议 ssh是较可靠 且专为远程登录会话和其他网络服务提供安全性的协议 可以通过ssh使得本机( Windows)能够远程连接并访问Linux机器 1、安装openssh-server sudo apt-get install openssh-client1:7.2p2-4 sudo apt-get install openssh…

怎样从windows通过SSH远程连接Linux

SSH&#xff08;安全外壳协议&#xff09; SSH 为 Secure Shell 的缩写&#xff0c;由 IETF 的网络小组&#xff08;Network Working Group&#xff09;所制定&#xff1b;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠&#xff0c;专为远程登录会话和其他网络服务提…

Linux中使用SSH服务远程连接Linux系统

目录 Linux之远程连接Linux系统一、为什么要远程连接Linux二、远程连接必备的知识三、虚拟机网络配置四、端口五、协议六、第一次连接Linux七、Linux切换虚拟终端八、查看终端信息shell命令九、配置nat网络&#xff1a;十、配置SSHD服务 Linux之远程连接Linux系统 1.linux安装…

Windows下通过ssh连接Linux

需求&#xff1a; windows通过命令行模式链接远程linux主机。 方法&#xff1a; 我的手里有一台windows的电脑&#xff0c;想通过它链接远程的Linux主机或者本机虚拟机中的Linux主机&#xff0c;当然&#xff0c;有很多的远程链接软件&#xff0c;比如著名的xshell和SecureC…

Linux命令之远程连接ssh

概述 ssh命令是openssh套件中的客户端连接工具&#xff0c;可以给予ssh加密协议实现安全的远程登录服务器&#xff0c;实现对服务器的远程管理。 在脚本中该命令有着重要重要&#xff0c;可用于在远程服务器中执行命令。 语法 ssh命令的基本语法如下&#xff1a;ssh [选项]…

SSH连接不上Linux 问题解决

查看linux 端口监听 #netstat -tnlp | grep ssh 以上图&#xff0c;说明该ssh是开着的&#xff0c; 连接端口是78 然后打开安全组 78 即可 修改该端口为&#xff1a;22 #vim /etc/ssh/sshd_config 输入e 进入该文件 多加一个端口。22端口 注意&#xff1a;1.将你的服务…

Linux中怎么搭建SSH远程连接服务器

文章目录 Linux中怎么搭建SSH远程连接服务器一、远程连接服务器&#xff1a;1、什么是远程连接服务器&#xff1a;2、远程连接服务器的功能3、常见的几种远程管理工具方式&#xff1a; 二、SSH连接加密技术&#xff1a;1、非对称密钥加密&#xff1a;2、对称密钥加密&#xff1…

Linux基础——SSH远程连接

简介 1.Ssh 是一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录&#xff0c;远程复制等功能。 2.OpenSSH 是实现SSH软件的开源软件项目 结构 C/S结构&#xff1a;客户机和服务器结构&#xff0c;是软件体系结构。 B/S结构&#xff1a;浏览器和服务器结构&…

windows 通过ssh连接到Linux主机

windows 通过ssh连接到Linux主机 文章目录 windows 通过ssh连接到Linux主机1.ssh的认识2.ssh的安全验证3.连接方法4.windows 通过ssh连接到Linux主机 1.ssh的认识 SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠&#xff0c;专为远程登录会话和其他网络服务提供安全性…

Linux配置SSH连接方式

1. SSH介绍 1&#xff09; 什么是SSH SSH是一种安全协议&#xff0c;主要用于给远程登录会话数据进行加密&#xff0c;保证数据传输的安全 2&#xff09;SSH服务端和客户端 SSH服务端是一个守护进程&#xff0c;一遍为sshd进程&#xff0c;在后端运行并响应来自客户端的请求。…

Linux----SSH远程连接服务

一、SSH介绍 1、SSH介绍 SSH是一个应用层协议 实现Linux的远程加密连接 适用于Linux服务器远程管理 Telnet 远程连接、不加密 适用于局域网网络设备的远程连接 2、管理Linux服务器的方式 本地管理 安装系统、故障修复 远程管理&#xff08;使用频率较高&#xff09; 3…