GVKun编程网logo

Python 遇到的坑 --ValueError: check_hostname requires server_hostname(python出现valueerror)

19

对于想了解Python遇到的坑--ValueError:check_hostnamerequiresserver_hostname的读者,本文将是一篇不可错过的文章,我们将详细介绍python出现va

对于想了解Python 遇到的坑 --ValueError: check_hostname requires server_hostname的读者,本文将是一篇不可错过的文章,我们将详细介绍python出现valueerror,并且为您提供关于$_SERVER["HTTP_HOST"]和$_SERVER["SERVER_NAME"]、'method' 对象在 username = (request.POST.get['username']) 中不可下标、anacond 或python3 报check_hostname requires server_hostname错误、Bad Request (Invalid Hostname) 什么意思? 200的有价值信息。

本文目录一览:

Python 遇到的坑 --ValueError: check_hostname requires server_hostname(python出现valueerror)

Python 遇到的坑 --ValueError: check_hostname requires server_hostname(python出现valueerror)

最近在新公司电脑上搭建 python 环境的时候,现在 python 更新到 3.9 版本了,然后下载下来之后,配好环境变量,然后安装 requests 插件,然后写一个简单的代码发送请求,结果发现居然报错了:

import requestsres = requests.get(url="https://blog.csdn.net/liboshi123/", verify=False)

运行上面的代码的时候,发现报了下面的错误:

raise ValueError("check_hostname requires server_hostname")ValueError: check_hostname requires server_hostname



报错的原因:

这个其实跟选用的 python 版本的关系不大,主要原因是因为每次使用 pip install 命令下载插件的时候,下载的都是最新的版本,比如下载 requests 插件,它会自动的将依赖的 urllib3 这个插件也安装,然后依赖的插件版本太高,就导致了这个报错的问题。


所以说,一般遇到这种莫名其妙的问题的时候,可以先去看一下是不是插件的问题导致的,解决措施就是 将 urllib3 插件的版本降低就可以,当然,直接在安装 requests 插件的时候,选择用低版本也可以解决这个问题。比如用下面的命令指定版本进行安装:

pip install requests==2.20或者使用下面的命令降低版本:pip install urllib3==1.25.8

这种类似的问题,在使用一些框架的时候经常会遇到,比如有的小伙伴在学习 django,然后照着别人博客写的文章操作,最后报错,很有可能就是插件的版本导致的。


另外,在线安装插件时,如果插件下载过慢,或者报错的话,可以在插件的命令后面加上 -i 指定插件安装的源。

pip install 插件名称  -i http://mirrors.aliyun.com/pypi/simple

有时候报插件找不到的话,就换一个源试试。

不想每次都指定源进行安装的话 ,那就在用户名下文件夹下建一个 pip 的文件夹,然后新建 pip.ini 的配置文件,写入下面的内容就行 (具体的源可以自己选择):{创建这个配置文件的存放位置有很多种方式都可以,感兴趣的可以自己去试试,比如 pip 所在目录下,或者 % APPDATA% 目录下去新建文件夹。}

[global]index-url = http://mirrors.aliyun.com/pypi/simple[install]trusted-host=mirrors.aliyun.com


另外,有些插件通过上面的在线方式就是容易出现报错的,可以尝试用离线安装的方式去安装插件,去网上下载 whl 格式的文件进行安装,比如,可以在下面的链接下下载:

whl 格式插件:

https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml

pip install xxx.whl

官网下载插件:

https://pypi.org/

解压后,在目录执行:python setup.py install


往期推荐


Postman 教程 - 变量、集合的基本使用

Postman 教程 - 通过设置代理 / 拦截器捕获请求信息

Postman 教程 - Response 相关的基本操作

Postman 教程 - Send Requests 相关的基本操作

Postman 教程 - 接口测试流程 & 发送第一个请求

Postman+Newman+Git+Jenkins 实现接口自动化测试持续集成

2020 年小博公众号文章集锦




本文分享自微信公众号 - 小博测试成长之路(libotest)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与 “OSC 源创计划”,欢迎正在阅读的你也加入,一起分享。

$_SERVER[

$_SERVER["HTTP_HOST"]和$_SERVER["SERVER_NAME"]

开发站群软件,用到了根据访问域名判断子站点的相关问题,PHP获取当前域名有两个变量 $_SERVER[''HTTP_HOST''] 和 $_SERVER[''SERVER_NAME''],两者的区别以及哪个更加可靠?

 

相同点:

当满足以下三个条件时,两者会输出相同信息。

1、服务器为80端口

2、apache的conf中ServerName设置正确

3、HTTP/1.1协议规范

 

不同点:

1、通常情况:

$_SERVER["HTTP_HOST"] 在HTTP/1.1协议规范下,会根据客户端的HTTP请求输出信息。

$_SERVER["SERVER_NAME"] 默认情况下直接输出apache的配置文件httpd.conf中的ServerName值。

2、当服务器为非80端口时:

$_SERVER["HTTP_HOST"] 会输出端口号,例如:snsgou.com:8080

$_SERVER["SERVER_NAME"] 会直接输出ServerName

因此在这种情况下,可以理解为:$_SERVER[''HTTP_HOST''] = $_SERVER[''SERVER_NAME''] : $_SERVER[''SERVER_PORT'']

3、当配置文件httpd.conf中的ServerName与HTTP/1.0请求的域名不一致时:

httpd.conf配置如下:

<virtualhost *>    
ServerName snsgou.com    
 ServerAlias blog.snsgou.com    
</virtualhost>

 

客户端访问域名 blog.snsgou.com

$_SERVER["HTTP_HOST"] 输出 blog.snsgou.com
$_SERVER["SERVER_NAME"] 输出 snsgou.com

 

所以,在实际程序中,应尽量使用_SERVER["HTTP_HOST"] ,比较保险和可靠。 

 

 

 

 

 

 

 

 

 

'method' 对象在 username = (request.POST.get['username']) 中不可下标

'method' 对象在 username = (request.POST.get['username']) 中不可下标

如何解决''method'' 对象在 username = (request.POST.get[''username'']) 中不可下标?

def signin(request):
    con = MysqL.connector.connect(host="localhost",user="root",passwd="",database="pim")
    cursor = con.cursor()
    con2 = MysqL.connector.connect(host="localhost",database="pim")
    cursor2 = con2.cursor()
    sqlcommand = "select username from pimapp_employees"
    sqlcommand2 = "select password from pimapp_employees"
    cursor.execute(sqlcommand)
    cursor2.execute(sqlcommand2)
    u=[]
    p=[]
  for i in cursor:
        u.append(i)
    for j in cursor2:
        p.append(j)
    res = list(map(itemgetter(0),u))
    res2 = list(map(itemgetter(0),p))    
    con3 = MysqL.connector.connect(host="localhost",database="pim")
    cursor3 = con2.cursor()
    if request.method =="POST":
        username = (request.POST.get[''username''])
        password = (request.POST.get[''password''])
        k=(len(res))
        i=1
        sqlcommand3 = "select firstname from pimapp_employees where username = username"
        cursor3.execute(sqlcommand3)
        lst =[]
        for firstname in cursor3:
              firstname = firstname
              name2 =''''.join(firstname)
        print(name2)
        while( i <k):
            if res[i]==username and res2[i]==password:
               return render(request,''main.html'',{''name'':name2})
               break
               i++
        else:
            messages.info(request,"Check username or password")
            return redirect(''log'')

    return render(request,''home.html'')   
    return render(request,''main.html'')

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

anacond 或python3 报check_hostname requires server_hostname错误

anacond 或python3 报check_hostname requires server_hostname错误

前往墨抒颖的网站查看纯净版本

anacond 或python3 报check_hostname requires server_hostname错误

在anaconda启动过程中提示如下错误

anaconda-check_hostname-requires-server_hostname-error.png

或者你可以在python3中看到类似的错误

python-error.jpg

错误解析

出现问题的主要原因是Urllib3 的 1.26.4 版本中存在一个错误。

在 Python 3.4 和 2.7.9 中,SSLContext 上有一个 check_hostname 属性,它将让 SSLContext 实例处理检查 do_handshake 中的主机名。urllib3 在可能的情况下依靠它而不是自己进行检查会很好。我认为这与将 SSLContext 用作 TLS 内容的"bag of configuration"的其他内容相得益彰。这可以通过确定 SSLContext 对象是否具有 check_hostname 属性来检测。有一个缺点,这依赖于将主机名作为 SSLContext().wrap_socket(server_name=)的一部分传递。最初这仅在 OpenSSL 启用了 SNI 时才有效。但是即使未启用 SNI,Python 3.4.3 和 2.7.9 也会接受 server_name。

解决方案

1. URLLIB3 降低到1.25.8以下urllib3 == 1.25.8

urllib3-lovered-version.jpg

2. 请求方法加验证=假参数

response = requests.request(''GET'', ''http://xxx.xxxx.com'', verify=False)

直接运行会报如下警告:

InsecureRequestWarning:正在发出未经验证的 HTTPS 请求。强烈建议添加证书验证。请参阅:https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings InsecureRequestWarning,

3. 在请求请求前,添加如下代码,即可解决以上警告

Urllib3.disable_warnings() 或 Requests.Packages.urllib3.disable_warnings()

4. 关掉代理

close-agent.png

相关文章

liunx下远程anaconda 搭建/构建环境,连接,移植/拷贝环境
Python3 获取任意贴吧 最新帖子制作词云图存储为markdown

Bad Request (Invalid Hostname) 什么意思? 200

Bad Request (Invalid Hostname) 什么意思? 200

一般来说与你电脑无关 错误请求(无效主机名 域名已绑定主机 但主机未绑定域名就会出现这种情况! 总结页面出现Bad Request (Invalid Hostname)的原因: 1.如果确定域名已经解析生效,但是仍然不能访问,出现Bad Request (Invalid Hostname).那么这就可能是您没有绑定该域名的原因 2.也有一部分情况, 比如一部分程序你上传之后就是用服务商提供的三级域名访问也是那个样子。也会有Bad Request (Invalid Hostname的错误提示 3.也许是限制了访问线程。也就是说当同时访问该网页超过一定人数的时候,其它人浏览时就会出现你所说的情况

本文同步分享在 博客 “lxw1844912514”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与 “OSC 源创计划”,欢迎正在阅读的你也加入,一起分享。

关于Python 遇到的坑 --ValueError: check_hostname requires server_hostnamepython出现valueerror的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于$_SERVER["HTTP_HOST"]和$_SERVER["SERVER_NAME"]、'method' 对象在 username = (request.POST.get['username']) 中不可下标、anacond 或python3 报check_hostname requires server_hostname错误、Bad Request (Invalid Hostname) 什么意思? 200等相关知识的信息别忘了在本站进行查找喔。

本文标签:

上一篇浅析python 中__name__ == ''__main__'' 的作用(python __name__=='__main__'作用详解)

下一篇python主机批量管理脚本(下)(python批量管理远程服务器)