使用 Symfony HttpClient returns 代码 0 请求,当与邮递员的相同请求工作正常时
Request with Symfony HttpClient returns code 0, when the same request with postman works fine
我有一个奇怪的问题,我向 postman 发出的请求(向我的 mercure hub)工作正常,但是使用 Symfony HttpClient 的 Publisher class(来自 Symfony mercure bundle)将产生响应代码 0。
根据我的研究,这意味着 URL 找不到,或者没有返回响应?
我最初认为它可能必须与 Publisher class 本身做一些事情,这就是打开这个 Issue on Github 的原因,但经过一番尝试后我认为可能存在通信错误我的容器?我尝试提供我的 mercure 容器 "networks: internal",其他一些容器也在使用它,但这也无济于事。
非常感谢任何想法..
/e: 我的 docker-撰写:
version: "3"
services:
traefik:
image: traefik:v1.7
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./.docker/traefik/traefik.toml:/etc/traefik/traefik.toml
networks:
- proxy
labels:
- traefik.enable=true
- traefik.docker.network=proxy
- traefik.frontend.rule=Host:traefik.heracles.local
- traefik.port=8080
nginx:
image: nginx:1.17-alpine
volumes:
- ./Source:/var/www
- ./.docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
links:
- php
networks:
- internal
- proxy
labels:
- traefik.docker.network=proxy
- traefik.enable=true
- traefik.basic.frontend.rule=Host:heracles.local
- traefik.basic.port=80
php:
build:
args:
USER_ID: ${USER_ID}
context: ./.docker/php
volumes:
- ./Source:/var/www
- ./.docker/php/conf/cli.ini:/etc/php/7.4/cli/conf.d/zz-symfony.ini
- ./.docker/php/conf/fpm.ini:/etc/php/7.4/fpm/conf.d/zz-symfony.ini
- ./.docker/php/conf/xdebug.ini:/etc/php/7.4/fpm/conf.d/zz-xdebug.ini
- ./.docker/php/conf/opcache.ini:/etc/php/7.4/fpm/conf.d/zz-opcache.ini
- ./.docker/php/conf/pool.conf:/etc/php/7.4/fpm/pool.d/www.conf
networks:
- internal
labels:
- traefik.enable=false
db:
image: mysql:5.7
env_file:
- .env
volumes:
- db_data:/var/lib/mysql
- ./.docker/mysql/conf.d:/etc/mysql/conf.d
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --skip-character-set-client-handshake
networks:
- internal
labels:
- traefik.enable=false
restart: always
adminer:
image: adminer
networks:
- internal
- proxy
labels:
- traefik.docker.network=proxy
- traefik.enable=true
- traefik.basic.frontend.rule=Host:db.heracles.local
- traefik.basic.port=8080
blackfire:
image: blackfire/blackfire
networks:
- internal
labels:
- traefik.enable=false
mailhog:
image: mailhog/mailhog
networks:
- internal
- proxy
labels:
- traefik.docker.network=proxy
- traefik.enable=true
- traefik.basic.frontend.rule=Host:mail.heracles.local
- traefik.basic.port=8025
mercure:
image: dunglas/mercure
environment:
- ALLOW_ANONYMOUS=1
- CORS_ALLOWED_ORIGINS=*
- JWT_KEY=ASD
- PUBLISH_ALLOWED_ORIGINS=http://heracles.local
- ADDR=:3000
ports:
- 3000:3000
networks:
internal:
proxy:
external: true
volumes:
db_data:
关于您的评论,您的 MERCURE_PUBLISH_URL
.env 变量确实必须引用您的 Mercure 容器,但不需要端口指示。如果你的 Mercure 容器的名称是 "mercure",环境变量应该这样设置:
MERCURE_PUBLISH_URL=http://mercure/.well-known/mercure
(如果您的连接安全,请将 http
替换为 https
)
好的伙计们,现在可以了。事实上正确的 url 是
MERCURE_PUBLISH_URL=http://mercure:3000/.well-known/mercure
因此,如果您使用 Docker 容器,请确保传递正确的主机 + 端口,并为您的 mercure 容器提供其他容器的网络(在我的情况下为内部)。
我有一个奇怪的问题,我向 postman 发出的请求(向我的 mercure hub)工作正常,但是使用 Symfony HttpClient 的 Publisher class(来自 Symfony mercure bundle)将产生响应代码 0。 根据我的研究,这意味着 URL 找不到,或者没有返回响应?
我最初认为它可能必须与 Publisher class 本身做一些事情,这就是打开这个 Issue on Github 的原因,但经过一番尝试后我认为可能存在通信错误我的容器?我尝试提供我的 mercure 容器 "networks: internal",其他一些容器也在使用它,但这也无济于事。
非常感谢任何想法..
/e: 我的 docker-撰写:
version: "3"
services:
traefik:
image: traefik:v1.7
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./.docker/traefik/traefik.toml:/etc/traefik/traefik.toml
networks:
- proxy
labels:
- traefik.enable=true
- traefik.docker.network=proxy
- traefik.frontend.rule=Host:traefik.heracles.local
- traefik.port=8080
nginx:
image: nginx:1.17-alpine
volumes:
- ./Source:/var/www
- ./.docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
links:
- php
networks:
- internal
- proxy
labels:
- traefik.docker.network=proxy
- traefik.enable=true
- traefik.basic.frontend.rule=Host:heracles.local
- traefik.basic.port=80
php:
build:
args:
USER_ID: ${USER_ID}
context: ./.docker/php
volumes:
- ./Source:/var/www
- ./.docker/php/conf/cli.ini:/etc/php/7.4/cli/conf.d/zz-symfony.ini
- ./.docker/php/conf/fpm.ini:/etc/php/7.4/fpm/conf.d/zz-symfony.ini
- ./.docker/php/conf/xdebug.ini:/etc/php/7.4/fpm/conf.d/zz-xdebug.ini
- ./.docker/php/conf/opcache.ini:/etc/php/7.4/fpm/conf.d/zz-opcache.ini
- ./.docker/php/conf/pool.conf:/etc/php/7.4/fpm/pool.d/www.conf
networks:
- internal
labels:
- traefik.enable=false
db:
image: mysql:5.7
env_file:
- .env
volumes:
- db_data:/var/lib/mysql
- ./.docker/mysql/conf.d:/etc/mysql/conf.d
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --skip-character-set-client-handshake
networks:
- internal
labels:
- traefik.enable=false
restart: always
adminer:
image: adminer
networks:
- internal
- proxy
labels:
- traefik.docker.network=proxy
- traefik.enable=true
- traefik.basic.frontend.rule=Host:db.heracles.local
- traefik.basic.port=8080
blackfire:
image: blackfire/blackfire
networks:
- internal
labels:
- traefik.enable=false
mailhog:
image: mailhog/mailhog
networks:
- internal
- proxy
labels:
- traefik.docker.network=proxy
- traefik.enable=true
- traefik.basic.frontend.rule=Host:mail.heracles.local
- traefik.basic.port=8025
mercure:
image: dunglas/mercure
environment:
- ALLOW_ANONYMOUS=1
- CORS_ALLOWED_ORIGINS=*
- JWT_KEY=ASD
- PUBLISH_ALLOWED_ORIGINS=http://heracles.local
- ADDR=:3000
ports:
- 3000:3000
networks:
internal:
proxy:
external: true
volumes:
db_data:
关于您的评论,您的 MERCURE_PUBLISH_URL
.env 变量确实必须引用您的 Mercure 容器,但不需要端口指示。如果你的 Mercure 容器的名称是 "mercure",环境变量应该这样设置:
MERCURE_PUBLISH_URL=http://mercure/.well-known/mercure
(如果您的连接安全,请将 http
替换为 https
)
好的伙计们,现在可以了。事实上正确的 url 是 MERCURE_PUBLISH_URL=http://mercure:3000/.well-known/mercure 因此,如果您使用 Docker 容器,请确保传递正确的主机 + 端口,并为您的 mercure 容器提供其他容器的网络(在我的情况下为内部)。