Юля: Как заставить HTTP.jl работать с ip WSL2 VM?

Я запустил простой http-сервер на WSL2 для обслуживания простой HTML-страницы на localhost: 8081.

Я хотел бы иметь доступ к этому через localhost: 8081 (или любой другой URL-адрес) на хост-машине.

Я выполнил инструкции https://docs.microsoft.com/en-us/windows/wsl/compare-versions.

Я использовал ip addr | grep eth0, чтобы найти IP-адрес в inet, а затем я запустил простой HTTP-сервер на Python и Julia

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

httpd = socketserver.TCPServer(("", PORT), Handler)

print("serving at port", PORT)
httpd.serve_forever()

приведенная выше версия python работает без проблем, но сервер Julia просто не работает.

using HTTP
using HTTP: Sockets, @ip_str
HTTP.serve() do request::HTTP.Request
   @show request
   @show request.method
   @show HTTP.header(request, "Content-Type")
   @show HTTP.payload(request)
   try
       return HTTP.Response("Hello")
   catch e
       return HTTP.Response(404, "Error: $e")
   end
end

который открывает порт 8000 и 8081 для HTTP-трафика. Затем я подошел к главному компьютеру и сделал localhost:8081 и $WSL2VMIP:8081

Ни то, ни другое не сработало.


person xiaodai    schedule 16.08.2020    source источник


Ответы (1)


Для Джулии вам, кажется, нужно предоставить IP-адрес виртуальной машины WSL2. Получите IP, используя ip addr | grep eth0, найдите IP как 172.69.13.20/20 и установите myip = ip"172.69.13.20"

Обратите внимание, что использовать ip"0.0.0.0" удобно, но это может быть НЕБЕЗОПАСНО (например, в общественном кафе), поэтому используйте его с осторожностью.

using HTTP
using HTTP: @ip_str
HTTP.serve(myip) do request::HTTP.Request
   @show request
   @show request.method
   @show HTTP.header(request, "Content-Type")
   @show HTTP.payload(request)
   try
       return HTTP.Response("Hello")
   catch e
       return HTTP.Response(404, "Error: $e")
   end
end
person xiaodai    schedule 16.08.2020