【问题标题】:Sending a http get request to a server with known public ip向具有已知公共 ip 的服务器发送 http get 请求
【发布时间】:2015-09-16 21:23:22
【问题描述】:

我有一个使用 python 的基本 http 服务器运行的服务器。使用的主机名是本地主机'127.0.0.1',端口号设置为8000。我有运行这台服务器的计算机的公共IP地址。 如果我想从另一台计算机向它发送 http get 请求,我会在浏览器中输入什么?

【问题讨论】:

  • http://:8080 不工作吗?
  • 我试过了,但它只会永远加载在我身边。在服务器端,没有打印任何内容表明接收到请求。
  • 确保您的服务器正在侦听所有接口,而不仅仅是 127.0.0.1。设置通常是 0.0.0.0 或 *.

标签: python ip server


【解决方案1】:

听起来您的服务器进程在错误的界面上运行。 127.0.0.1 不是主机名,而是IP 地址,特别是本地环回地址。任何其他机器都无法访问它(除非您的网络配置出现严重问题)。

你可以在 127.0.0.1 接口上运行任何你喜欢的东西,没有其他人可以直接从远程机器连接到它。这就是重点——它用于测试使用 Internet 协议的程序,以及(近年来)用于启动单用户服务器而不用担心安全性。 (Python 2 的 SimpleHTTPServer 这样做,一些个人 wiki 也是如此,我认为是 iPython Notebook。)

运行您的 Web 服务器的主机的公共地址是一个完全不相关的网络接口,有自己的硬件和自己的 8000 端口。它不知道也不关心你有什么东西侦听某个其他接口的端口 8000,因此它应该拒绝连接到该端口的尝试。

由于您没有发布任何代码,我不知道您需要进行哪些更改才能让您的服务器在正确的界面上运行。假设您或多或少关注了example in the BaseHTTPServer.HTTPServer docs

def run(
  server_class=BaseHTTPServer.HTTPServer,
  handler_class=BaseHTTPServer.BaseHTTPRequestHandler,
  ):
    server_address = ('', 8000)  # <----=  Replace the string.
    httpd = server_class(server_address, handler_class)
    httpd.serve_forever()

server_address 元组是一个包含 IP 地址('1.2.101.202' 或其他)的字符串,后跟一个整数端口号。所以将字符串替换为您的主机面向公众的 IP 地址

请注意,端口 8000 超出了保留范围(0 到但不包括 1024),因此某些不相关的服务可能已经在使用该端口。 (Numerous applications 已经占用了 8000 端口。)如果是这样,您只需选择另一个端口号。您可以选择从 1024 到但不包括 65536 的任何值,但与 8000 一样,其他人可能已经在使用它。

根据您的操作系统及其安全设置,您可能无权打开侦听任意端口号的套接字。如果是这样,那是您和您的 ISP 或系统管理员之间的事情。

【讨论】:

    【解决方案2】:

    http://yourip:port/func

    yourip 是您的公共 IP。 端口是 8080

    func 是你注册的函数。

    并确保您的端口已打开

    【讨论】:

      猜你喜欢
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      相关资源
      最近更新 更多