Python “如何修复”;LDAPInvalidPortError:端口必须是整数";

Python “如何修复”;LDAPInvalidPortError:端口必须是整数";,python,ldap,ldap3,Python,Ldap,Ldap3,我正在尝试使用LDAP连接到服务器。我已经让脚本在没有使用特定端口号的测试服务器上运行。尝试连接到使用特定端口的Dev系统时,我收到以下错误: File "site-packages\ldap3\core\server.py", line 117, in__init__ ldap3.core.exceptions.LDAPInvalidPortError: port must be an integer [7836] Failed to execute script ldap_query 过去

我正在尝试使用LDAP连接到服务器。我已经让脚本在没有使用特定端口号的测试服务器上运行。尝试连接到使用特定端口的Dev系统时,我收到以下错误:

File "site-packages\ldap3\core\server.py", line 117, in__init__
ldap3.core.exceptions.LDAPInvalidPortError: port must be an integer
[7836] Failed to execute script ldap_query
过去我们使用的python ldap在ldap.initialize('ldap://cd dir…net/(port)')命令中的指定端口没有问题。下面可以看到生成错误的代码段

def ldap_connect(地址、dn、密码)
服务器=服务器(地址)
尝试:
conn=连接(服务器、dn、密码、自动绑定=True)
打印('身份验证成功')
打印(conn.extend.standard.who\u am\u i())
除了:LDAPBindError as err:
打印(LDAPBindError)
ldap_connect('ldap://cd-dir-cd-test…net:port/dc=cd…dc=com','user','password')
为了解决这个问题,我尝试将端口号从地址中删除,而是按以下方式进行:

server=server(地址,端口=XXX)
解决了“端口必须是整数”错误。然而,这并没有解决问题。我收到的新错误是:

File "site-packages\ldap3\core\connection.py", line 325, in__init__
File "site-packages\ldap3\core\connection.py", line 340, in do_auto_bind
File "site-packages\ldap3\strategy\sync.py", line 56, in open
File "site-packages\ldap3\strategy\base.py", line 151, in open
ldap3.core.exceptions.LDAPSocketOpenError: invalid server address
[5976] Failed to execute script ldap_query
我如何解决这个问题?有没有其他方法可以设置我不知道的端口


最好的祝愿,

您正在将一个
ldap://
URI传递给
ldap\u connect
,但它看起来像
ldap3.Server
类需要一个主机名或地址。也就是说,您当前正在尝试这样做:

server=server('ldap://cd-dir-cd-test.example.net:port')
当您需要的是:

server=server('cd-dir-cd-test.example.net',port=port)
当然,
端口
必须是整数,而不是字符串。您可以使用
ldap3.utils.uri.parse_uri
方法从ldap uri提取所需信息:

来自ldap3导入服务器,连接
从ldap3.utils.uri导入解析uri
def ldap_连接(uri、dn、密码):
parsed=parse_uri(uri)
服务器=服务器(已解析['host'],使用_ssl=已解析['ssl'],port=已解析['port']))
conn=连接(服务器、dn、密码、自动绑定=True)
打印('身份验证成功')
打印(conn.extend.standard.who\u am\u i())
返回控制
conn=ldap_connect('ldap://cd-dir-cd-test….net:port/dc=cd…dc=com',
'用户','密码')

它确实解决了问题。你解决了那个问题,又遇到了一个新问题。新的问题现在出现在
address
的内容中。我不确定这是否真的解决了问题。地址与许多其他应用程序中使用的字符串相同,因此不应引起任何问题。如果从地址字符串中删除端口,则会出现错误2。如果我将其保留在中,即使使用port=XXX,也会得到错误1。这不是语法上有效的Python代码。