从收听 socket/HTTPServer 获取传入 URL
Get incoming URL from listening socket/HTTPServer
美好的一天 Whosebug,
今天早上我 运行 遇到了一个问题,我似乎找不到有效的答案。我正在尝试通过 HTTPServer
或简单的 socket
-ing 从将我重定向到 localhost
(除了下面的监听代码之外什么都没有(没有网络服务器,没有页面,什么都没有)。)带有 token
和 scope
变量(如 URL 下面有问题)。我想要的结果是保存这些变量,以便我可以使用它们:
http://localhost/#token=aai789as&scope=book%3Aedit+chat%3Aedit
我尝试了以下方法并取得了一些进展,但没有达到预期的结果:
from http.server import SimpleHTTPRequestHandler, HTTPServer
from urllib.parse import parse_qs
class MyHandler(SimpleHTTPRequestHandler):
def do_GET(self):
qs = {}
path = self.path
if '?' in path:
path, tmp = path.split('?', 1)
qs = urlparse.parse_qs(tmp)
print(self.path)
print (path, qs)
def log_request(self, code=None, size=None):
print('Request')
def log_message(self, format, *args):
print('Message')
if __name__ == "__main__":
try:
server = HTTPServer(('localhost', 80), MyHandler)
print('Started http server')
server.serve_forever()
except KeyboardInterrupt:
print('^C received, shutting down server')
server.socket.close()
上面的代码片段加载了,但实际上并没有打印任何有用的东西。事实上,它只打印空白语句。但它确实检测到正在建立的连接。
这样做也是如此:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("localhost", 80))
s.listen(1)
conn, addr = s.accept()
d = conn.recv(4096)
conn.close()
print(d)
但这比空白语句 return 更有效,但它不足以从 URL:
中获取变量
b'\x07\n'
b'GET / HTTP/1.1\r\nHost: localhost\r\nUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:64.0) Gecko/20100101 Firefox/64.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en,en-US;q=0.7,nl;q=0.3\r\nAccept-Encoding: gzip, deflate\r\nDNT: 1\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\n\r\n'
我不知道我应该做什么,因为我不知道我到底在寻找什么;搜索文档占用了我大半天的时间。因此,我求助于永远有用的 Whosebug,希望找到比我拥有的更好的知识。
感谢您的宝贵时间,
-布伦特
http://localhost/#token=aai789as&scope=book%3Aedit+chat%3Aedit
这种URL只是部分传输到服务器。 #
和后面的所有内容只有浏览器知道,并且可以从 Javascript 中作为 location.hash
访问。它不会被传输到服务器,即所有服务器将看到的是 http://localhost/
.
b'GET / HTTP/1.1\r\nHost: localhost\r\n ...'
这部分提供服务器将知道的 URL 中的所有内容。 Host
header 中的 localhost
指定主机名,GET /
指定路径 /
- 一起构成 'http://' + 'localhost' + '/'
即 http://localhost/
.
有关详细信息,请参阅 Is the anchor part of a URL being sent to a web server?。
美好的一天 Whosebug,
今天早上我 运行 遇到了一个问题,我似乎找不到有效的答案。我正在尝试通过 HTTPServer
或简单的 socket
-ing 从将我重定向到 localhost
(除了下面的监听代码之外什么都没有(没有网络服务器,没有页面,什么都没有)。)带有 token
和 scope
变量(如 URL 下面有问题)。我想要的结果是保存这些变量,以便我可以使用它们:
http://localhost/#token=aai789as&scope=book%3Aedit+chat%3Aedit
我尝试了以下方法并取得了一些进展,但没有达到预期的结果:
from http.server import SimpleHTTPRequestHandler, HTTPServer
from urllib.parse import parse_qs
class MyHandler(SimpleHTTPRequestHandler):
def do_GET(self):
qs = {}
path = self.path
if '?' in path:
path, tmp = path.split('?', 1)
qs = urlparse.parse_qs(tmp)
print(self.path)
print (path, qs)
def log_request(self, code=None, size=None):
print('Request')
def log_message(self, format, *args):
print('Message')
if __name__ == "__main__":
try:
server = HTTPServer(('localhost', 80), MyHandler)
print('Started http server')
server.serve_forever()
except KeyboardInterrupt:
print('^C received, shutting down server')
server.socket.close()
上面的代码片段加载了,但实际上并没有打印任何有用的东西。事实上,它只打印空白语句。但它确实检测到正在建立的连接。 这样做也是如此:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("localhost", 80))
s.listen(1)
conn, addr = s.accept()
d = conn.recv(4096)
conn.close()
print(d)
但这比空白语句 return 更有效,但它不足以从 URL:
中获取变量b'\x07\n'
b'GET / HTTP/1.1\r\nHost: localhost\r\nUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:64.0) Gecko/20100101 Firefox/64.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en,en-US;q=0.7,nl;q=0.3\r\nAccept-Encoding: gzip, deflate\r\nDNT: 1\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\n\r\n'
我不知道我应该做什么,因为我不知道我到底在寻找什么;搜索文档占用了我大半天的时间。因此,我求助于永远有用的 Whosebug,希望找到比我拥有的更好的知识。
感谢您的宝贵时间, -布伦特
http://localhost/#token=aai789as&scope=book%3Aedit+chat%3Aedit
这种URL只是部分传输到服务器。 #
和后面的所有内容只有浏览器知道,并且可以从 Javascript 中作为 location.hash
访问。它不会被传输到服务器,即所有服务器将看到的是 http://localhost/
.
b'GET / HTTP/1.1\r\nHost: localhost\r\n ...'
这部分提供服务器将知道的 URL 中的所有内容。 Host
header 中的 localhost
指定主机名,GET /
指定路径 /
- 一起构成 'http://' + 'localhost' + '/'
即 http://localhost/
.
有关详细信息,请参阅 Is the anchor part of a URL being sent to a web server?。