Python获取HTTP请求需要多次尝试才能成功

Python获取HTTP请求需要多次尝试才能成功,python,get,python-requests,Python,Get,Python Requests,我有一行代码,我正在向http服务器发送get()请求: json_data = requests.get( "http://"+ <host_ip> + <http_resource_path>, auth=HttpNtlmAuth('<Username>', '<Passwrd>'), headers={'host': host_DNS_name}).json() 正如您在使用相同的URL、凭证和端口号(它是8

我有一行代码,我正在向
http
服务器发送
get()
请求:

json_data = requests.get(
        "http://"+ <host_ip> + <http_resource_path>,
        auth=HttpNtlmAuth('<Username>', '<Passwrd>'), headers={'host': host_DNS_name}).json()

正如您在使用相同的
URL
凭证
端口号
(它是
80
)时所看到的,每次都要尝试三次才能成功(前两次尝试导致
未经授权的访问
,但第三次尝试使用相同的参数成功)。此多次尝试会导致大约15秒的延迟(在第一次尝试和第三次尝试之间)。现在我无法理解为什么在参数没有改变的情况下要尝试3次才能成功?我的代码中是否有一些东西可以解决此问题和/或调试,或者我试图访问的服务器中是否存在此问题?

服务器正在返回401响应,而您的问题并没有说明您连接到的服务器,因此我们无法真正解释原因。这可能是因为您遇到了一些速率限制代码,但服务器可能会出于多种原因拒绝前2个请求

如果您可以控制服务器的代码,请查看源代码和处理请求的代码。还要看看适用于所有请求的代码,比如中间件


如果您没有访问源代码的权限,您必须询问网站所有者这可能是什么原因。

您使用的是我不熟悉的
HttpNltmAuth
,但这里说它的工作原理是三次往返:


如果您希望减少往返次数,请在服务器端切换到HTTP摘要访问验证或HTTP基本访问验证(请同时考虑安全性,尤其是HTTP基本访问验证)。

由于您没有提供url,因此似乎很难知道问题是否出在服务器上,任何人如何测试它以确保它是您的代码而不是服务器?@Delrious莴苣我无法访问服务器代码,我不提供url的原因是因为它是只能从VPC访问的intranet url。是否有一种方法可以向python代码中添加一些东西,帮助我调试服务器上发生的事情,以及为什么它拒绝前两次尝试?猜测:可能与HTTP摘要身份验证有关。在Digest的例子中,至少会有两个请求:第一个(401)请求获取用于加密身份验证凭据的nonce,另一个请求实际进行身份验证。我不确定第三个请求是从哪里来的。@Lina是否有办法或解决办法来测试它,如果是这样的话,请解决它,使其在一次尝试中成功?对不起,我之前的评论是错误的,我刚刚注意到您使用的是NLTM auth。我会发布一个正确的答案。我没有访问服务器代码的权限。有没有一种方法可以向python代码中添加一些东西来帮助我调试服务器上发生的事情,为什么它拒绝前两次尝试?
http://<host-IP:80 "GET <http_resource_path> HTTP/1.1" 401 58
http://<host-IP:80 "GET <http_resource_path> HTTP/1.1" 401 341
http://<host-IP:80 "GET <http_resource_path> HTTP/1.1" 200 74