Postman:套接字挂起

42

我刚开始使用Postman。在执行集合运行器时,出现了“错误:套接字挂起”的错误。我读了一些关于套接字挂起的帖子,它提到发送请求时可能没有服务器端响应,可能会超时。在Postman Collection Runner中如何延长请求的时间长度?


单个请求/测试是否正常工作? - Valentin Despa
不行,它无法工作。我正在发送一个文件(大小为20kb的图像)。 - kenn_ross
有同样的问题。我用Postman集合运行了100次(使用不同的变量),但1-2个请求失败并出现了套接字挂起的情况。 - IliaEremin
1
您可以在设置中将超时时间为0来消除超时,但Socket挂起不是一个超时错误。我在表单提交上遇到了相同的问题。 - Aaron McMillin
将 http:// | https://(根据情况而定)添加到端点 URL 中解决了我的问题。 - Oluwadamilola Adegunwa
显示剩余2条评论
22个回答

36

对我来说,这是因为我的应用程序切换到了https,而我的Postman请求仍然使用http。将Postman更改为https修复了它。


你是如何切换到 https 的?你的意思是请求地址栏中吗?因为我正在尝试请求 GET http://localhost:49153/api/stocks/get ,但响应是 Error: socket hang up - BaltoStar
是的,请在那个GET调用上尝试使用HTTPS。 - BrianK
刚刚尝试了一下,我的错误变成了“错误:无法建立隧道套接字,状态码=502”。 - MonneratRJ

18

Socket hang up,错误与端口相关。我分享一下我的经验。当您使用相同的端口连接数据库时,该端口已被其他服务使用,则会出现“Socket Hang up”错误。

例如:端口6455是某些其他服务或连接的专用端口。您不能在同一服务器上使用相同的端口(6455)来建立数据库连接。


对我来说,服务器是在https中,而我正在使用http进行调用。 - Mostafa

9
有时候,当客户端等待响应的时间非常长时,会出现此错误。可以使用 202(已接受) Http 状态码来解决这个问题。这基本上意味着您要告诉服务器开始执行您想要的工作,然后每隔一定的时间检查它是否完成了工作。
如果您编写了该服务器,则相对容易实现。如果没有,请查阅您使用的服务器文档。

如果服务器尚未完成其工作,您如何返回任何代码? - arxakoulini
附加链接中的第一句话:“HTTP状态202表示请求已被接受进行处理,但处理尚未完成。” - Koby 27

7

Postman报错"无法获取响应" "错误: socket hang up". 我通过在请求中添加 Content-Length http头解决了这个问题。


谢谢,它对我有用。我从其他来源复制了请求,然后更改了POST请求中的有效载荷数据。因此,Content-Length不匹配。 :) - Jawand Singh
7
那应该是多长呢? - Oliver Dixon
@OliverDixon,它应该是自动计算的(默认选项)。对我来说,问题在于禁用主机头。 - iOS
例如,使用Postman进行测试时,我该如何计算长度? - Oliver Dixon
如果您只是添加 Content-Type,它也可以正常工作。我将 application/vnd.api+json 添加为值。 - Harrison O

3

我定义了一个Authentication方法,用于生成令牌,并将其返回类型标注为可空字符串:

public string? Authenticate(string username, string password) 
{
  if(!users.Any(u => u.Key==username && u.Value == password))
    {
      return null;
    }
  var tokenHandler = new JwtSecurityTokenHandler();


  var tokenKey = Encoding.ASCII.GetBytes(key);
  var tokenDescriptor = new SecurityTokenDescriptor()
  {
    Subject = new ClaimsIdentity(new Claim[]
    {
       new Claim(ClaimTypes.Name, username)
    }),
    Expires = DateTime.UtcNow.AddHours(1),
    SigningCredentials = new SigningCredentials(new 
    SymmetricSecurityKey(tokenKey), 
    SecurityAlgorithms.HmacSha256Signature)
  };
   var token = tokenHandler.CreateToken(tokenDescriptor);
   return tokenHandler.WriteToken(token);
}

将可空字符串更改为简单字符串,修复了“套接字挂起”的问题!

3
今日免费次数已满, 请开通会员/明日再来

谢谢!我还经常忘记VPN是问题的根源!(当一个人从事IT工作时) - Bob

1
对我来说,问题与客户端和服务器上的http版本不匹配有关。

客户端假定为http v2,而服务器(spring boot / tomcat)在这种情况下是http v1

当我在服务器上配置为v2时,问题得到了解决。

在spring boot中,您可以按如下方式配置http v2:

server.http2.enabled=true

注意 - 场景与客户端认证机制(即 MTLS)有关

在没有客户端认证/ MTLS 的情况下,它可以正常工作,但对于客户端认证,Spring Boot 中的版本设置是重要的救援点


1
你正在使用nodemon或其他文件监视器吗?在我的情况下,我生成了一些本地文件,上传它们,然后将URL发送回给我的用户。不幸的是,nodemon会看到项目的“更改”,并在响应发送之前触发重启。我从我的文件监视器中忽略了构建目录,并解决了这个问题。
这里是Nodemon忽略文件的说明:https://github.com/remy/nodemon#ignoring-files

1
当客户端等待响应很长时间时,会发生这种情况。尝试从Postman同步您的API请求,然后进行登录提交即可完成。

1

对我有用的是将 URL 中的“localhost”替换为http:// 127.0.0.1或任何其他本地机器分配的地址。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接