gpt4 book ai didi

python - 使用外部IP地址连接到服务器时出现Curl "Connection Refused"

转载 作者:行者123 更新时间:2023-12-01 03:42:36 26 4
gpt4 key购买 nike

我已经创建了一个 RESTful 服务器,当我使用本地 IP 地址时,我可以成功发出请求并获得响应。我希望它能够暴露在互联网上。我设置了端口转发规则,但似乎无法正常工作。从我读到的内容来看,(7) 中的“连接被拒绝”意味着有东西阻止了它,无论是防火墙还是 ISP 问题。关于该做什么有什么想法吗?

这是适用于我的本地 IP 的curl 命令:

Pako-2:Pokebot pako$ curl -X GET http://192.168.1.8:30000/api/v1/getrecord/test
{"data": [{"id": 1, "title": "learn python"}, {"id": 2, "title": "get paid"}]}

这是当我尝试使用 What's my ip 给我的外部 IP 地址时看到的结果

Pako-2:Pokebot pako$ curl -X GET http://MyIpHere:30000/api/v1/getrecord/test
curl: (7) Failed to connect to myIPAddress port 30000: Connection refused

这是我在路由器/调制解调器中制定的端口转发规则 enter image description here

这是我的路由器/调制解调器高级设置选项。我尝试调整我的防火墙设置,但没有成功。我尝试仅使用 NAT,也尝试使用低安全级别并检查所有端口。

enter image description here enter image description here enter image description here enter image description here

-----------------编辑--------------------------------

这是端口转发屏幕,我应该将 30000 设置为开始和结束吗? enter image description here

这是我的服务器的一些 python 代码:

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
from SocketServer import ThreadingMixIn
import threading
import argparse
import re
import cgi
import json


TODOS = [
{'id': 1, 'title': 'learn python'},
{'id': 2, 'title': 'get paid'},
]

class LocalData(object):
records = {}


class HTTPRequestHandler(BaseHTTPRequestHandler):
print "HTTPRequestHandler BaseHTTPRequestHandler = ", BaseHTTPRequestHandler
def do_POST(self):
print "do_POST"
if None != re.search('/api/v1/addrecord/*', self.path):
ctype, pdict = cgi.parse_header(self.headers.getheader('content-type'))
if ctype == 'application/json':
length = int(self.headers.getheader('content-length'))
data = cgi.parse_qs(self.rfile.read(length), keep_blank_values=1)
recordID = self.path.split('/')[-1]
LocalData.records[recordID] = data
print "record %s is added successfully" % recordID
else:
data = {}
self.send_response(200)
self.end_headers()
else:
self.send_response(403)
self.send_header('Content-Type', 'application/json')
self.end_headers()
return

def do_GET(self):
print "do_GET"
self.send_response(200)
self.end_headers()
self.wfile.write(json.dumps({'data': TODOS}))
return


class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
allow_reuse_address = True

def shutdown(self):
self.socket.close()
HTTPServer.shutdown(self)


class SimpleHttpServer():
def __init__(self, ip, port):
self.server = ThreadedHTTPServer((ip, port), HTTPRequestHandler)

def start(self):
self.server_thread = threading.Thread(target=self.server.serve_forever)
self.server_thread.daemon = True
self.server_thread.start()

def waitForThread(self):
self.server_thread.join()

def addRecord(self, recordID, jsonEncodedRecord):
LocalData.records[recordID] = jsonEncodedRecord

def stop(self):
self.server.shutdown()
self.waitForThread()


if __name__ == '__main__':
server = SimpleHttpServer("0.0.0.0", 30000)


print 'HTTP Server Running...........'
server.start()
server.waitForThread()

--------------------编辑2--------------------

尝试只拥有 1 个端口,没有开始/结束范围,并且需要一个范围... enter image description here enter image description here

最佳答案

我觉得奇怪的是,您会从本地网络内部拒绝连接,因为路由器应该能够检测到外部 IP 是对其自身的引用。

这种能力可能取决于路由器,但这是我的网络经验。

话虽这么说,如果您想在使用端口转发规则后测试外部防火墙,那么您需要一台不在本地网络上的设备。

如果您无法使用其他设备,例如具有蜂窝套餐的智能手机,那么您可以尝试使用 CanYouSeeMe测试端口是否正在打开。

您可能还想为您的服务器设置 DHCP 保留。换句话说,设置一个静态IP地址。

关于python - 使用外部IP地址连接到服务器时出现Curl "Connection Refused",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39338451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com