Webhooks из нового API TradingView исчезают, что может блокировать запросы POST?
С тех пор, как TradingView открыл свою поддержку веб-крюка, я старался изо всех сил пытаться выяснить, почему мой сервер не получает никаких сигналов. До сих пор я сделал следующее:
- Убедитесь, что порты открыты, и что TradingView действительно отправляет запросы POST.
- Попробовал POSTing на сервере barebones nodejs, сервере фляги и, наконец, обратный прокси-сервер nginx к серверу фляги.
- Перекрестные ссылки на входящие заголовки POST и тело на webhook.site, скопировали его на Postman, а также другие инструменты, и мой сервер получил их нормально
Вы можете увидеть сигналы, поступающие в прямом эфире здесь: http://webhook.site/#!/48e29a5b-d266-4021-8b96-0039371b3643/2005d010-e3ae-4077-8808-af34491f5a4d/
Но где-то в процессе доставки что-то явно идет не так, потому что в журналах nginx и unix нет никаких следов запросов. Это определенно не проблема с брандмауэром или CORS, или у меня будет такая же проблема при репликации с инструментами, верно? Может ли кто-нибудь помочь мне взломать это дело?
Вот мой конфиг nginx:
server {
listen 80;
server_name lunarlabs.org;
location / {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name lunarlabs.org;
ssl_certificate /etc/letsencrypt/live/***.org/cert.pem;
ssl_certificate_key /etc/letsencrypt/live/***.org/privkey.pem;
# ...
access_log /var/log/nginx.log;
error_log /var/log/nginxerror.log;
root /var/www/html/public;
index index.php;
location / {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,X-Forwarded-For,content-length';
include proxy_params;
proxy_pass http://unix:/home/tvhook/***;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
С демо-сервером webhook, который я настроил, можно связаться по адресу https://lunarlabs.org/webhook - любые данные POST в формате JSON должны возвращать 200. Но сигналы TradingView, по-видимому, действительно не любят мой сервер или мой сервер действительно не нравится их просьба.
3 ответа
У меня была такая же проблема.
Поддержка Tradingview сообщила об ошибке на своей стороне: "x509: сертификат подписан неизвестным органом". Однако запрос curl работал нормально для меня.
Я использую сертификат Comodo SSL, и оказалось, что я не установил "цепной сертификат" на моей стороне в nginx. Настройка и перезапуск nginx помогли. Webhooks из ТВ сейчас работают нормально.
Сообщение https://lunarlabs.org/webhook: x509: сертификат подписан неизвестным органом
curl --data 'ds' ' https://lunarlabs.org/webhook' curl: (60) Одноранговый сертификат не может быть аутентифицирован с помощью известных сертификатов CA Более подробно здесь: http://curl.haxx.se/docs/sslcerts.html
curl выполняет проверку сертификата SSL по умолчанию, используя "комплект" открытых ключей центра сертификации (CA certs). Если файл пакета по умолчанию не подходит, вы можете указать альтернативный файл с помощью параметра --cacert. Если этот HTTPS-сервер использует сертификат, подписанный ЦС, представленным в комплекте, проверка сертификата, вероятно, не удалась из-за проблемы с сертификатом (возможно, срок его действия истек или имя может не совпадать с именем домена в URL-адресе). Если вы хотите отключить проверку сертификата с помощью curl, используйте параметр -k (или --insecure).
Я столкнулся с той же проблемой, хотя мои настройки могут быть немного другими.
Apache + Flask
tradingview_alert = request.get_json(force=True)
Я пробовал серверы Windows и Linux(ubuntu) (с Apache), и оба, казалось, получили пинг, но пустые данные сообщения. Я не мог выяснить проблему до настоящего времени (сомневаюсь, что ТВ не справится с завитком).
Итак, у меня есть два варианта:
1) перейти на хук "Mail-to-SMS" и использовать простой сервис https://cloudmailin.com/
или
2) Используйте прямые ссылки для Webhook, например:
alert1: example.com/?action=BUY
alert2: example.com/?action=SELL
Итак, тогда вам не нужно будет пустое сообщение, вместо этого извлеките $_GET
переменные запроса.