【问题标题】:Cannot connect to localhost with cURL on Command Prompt无法在命令提示符下使用 cURL 连接到 localhost
【发布时间】:2017-11-03 16:58:08
【问题描述】:

我刚刚在我的硬盘驱动器上安装了 cURL,以便使用我的 localhost 进行测试(在命令提示符下)。但是我无法连接到任何端口。您可以在下面看到目录和我的输入:

C:\Users\me\curl\src>curl -v http://localhost:9000

这给了我:

  • 将 URL 重建为:http://localhost:9000/
  • 不支持名称查找超时
  • 正在尝试 ::1...
  • TCP_NODELAY 设置
  • 正在尝试 127.0.0.1...
  • TCP_NODELAY 设置
  • 连接到 ::1 端口 9000 失败:连接被拒绝
  • 连接到 127.0.0.1 端口 9000 失败:连接被拒绝
  • 无法连接到 localhost 端口 9000:连接被拒绝
  • 正在关闭连接 0 curl:(7)无法连接到 localhost 端口 9000:连接被拒绝

也许我应该补充一下,我正在使用 IntelliJ,并且已经在硬盘驱动器上启用了 cURL(允许我从任何目录访问它);提示我尝试以下操作:

C:\Users\me\scala\play\my-project>curl -v http://localhost:9000/

返回:

  • 不支持名称查找超时
  • 正在尝试 ::1...
  • TCP_NODELAY 设置
  • 连接到 ::1 端口 9000 失败:连接被拒绝
  • 正在尝试 127.0.0.1...
  • TCP_NODELAY 设置
  • 连接到 127.0.0.1 端口 9000 失败:连接被拒绝
  • 无法连接到 localhost 端口 9000:连接被拒绝
  • 正在关闭连接 0 curl:(7)无法连接到 localhost 端口 9000:连接被拒绝

看来9000端口没有打开。我现在认为这需要在 intelliJ 中进行配置 - here - 但这看起来好像只在 Ultimate Edition 上受支持。这可能是我遇到的问题的原因。这可能对其他人有帮助,但如果有人确实有更多信息,最好确定这一点。

【问题讨论】:

  • 这个端口有没有人监听
  • 我正在 IntelliJ 中进行一些 scala 编程,我认为这就是监听/连接端口的方法。是我错了吗?
  • 问题是没有人在监听端口 9000。您需要从另一个程序(您的服务器)打开一个套接字并开始在那里监听。否则你的机器会尝试连接到它自己的第 9000 个端口,但是由于没有人说“我在听”它说“连接被拒绝”。
  • @htkibar 谢谢。我不完全确定在哪里执行此操作(“从另一个程序(您的服务器)打开一个套接字并开始在那里收听”)。我认为按照here 的概述在路由器上创建一个虚拟服务器将允许我连接到该端口,但不幸的是没有。
  • 这样想,你已经打开了端口(道路是开放的)但是它后面没有人。您需要在那里运行的应用程序来响应您。

标签: curl intellij-idea command-line localhost command-prompt


【解决方案1】:

这意味着您的应用程序尚未启动(因此它实际上并未在端口 9000 上侦听)

您应该在 IntelliJ 中添加一个运行配置 (Run > Edit Configurations > + > Play 2 App) 并在进行 curl 调用之前运行它。

启动应用程序的另一种方法是在项目文件夹中打开一个终端,然后运行sbt run

【讨论】:

  • 最简单的解决方案就是最好的解决方案。我实际上认为 IntelliJ 在运行时会监听(预先指定的)端口,但事实并非如此。正如你提到的,对我来说,这是从 IntelliJ 终端完成的。谢谢你:}
【解决方案2】:

在运行curl时尝试以下服务器代码:

import java.net._
import java.io._
import scala.io._

val server = new ServerSocket(9000)
while (true) {
    val serv = server.accept()

    val in = new BufferedSource(serv.getInputStream()).getLines()
    val out = new PrintStream(serv.getOutputStream())

    out.println(in.next())
    out.flush()
    serv.close()
}

【讨论】:

  • 谢谢。不知道你建议把它放在哪里。在 IntelliJ 中运行它?
  • 是的,你应该在 Intellij 中运行
  • 所以我运行了这个并且发生了一些变化,但是当在 Command Prompt 上输入 curl -n http://localhost:9000/ 时,我返回的是 GET / HTTP/1.1 而不是页面标记。不过似乎很接近..
  • 这意味着你得到了一些回报。现在,您需要将要传输的任何内容写入输出流。
  • 他没有在the vid 我提到过。我显然不知道该怎么做,也不知道我到底在做什么。你能建议这样做的任何参考吗?谢谢
猜你喜欢
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 2015-11-24
  • 1970-01-01
相关资源
最近更新 更多