Я пытаюсь подключиться к удаленной отладке Chrome с помощью cUrl, однако ответы от Chrome возвращают "200 OK", но нет данных.
Я настроил хром, используя:
chrome.exe --headless --remote-debugging-port=12345
Я могу успешно получить список страниц с:
>curl -i "http://localhost:12345/json"
HTTP/1.1 200 OK
Content-Length:612
Content-Type:application/json; charset=UTF-8
[ {
"description": "",
"devtoolsFrontendUrl": "/devtools/inspector.html?ws=localhost:12345/devtools/page/19d24d3a-25b7-4ee8-a5cf-4f3d17778575",
...
"webSocketDebuggerUrl": "ws://localhost:12345/devtools/page/19d24d3a-25b7-4ee8-a5cf-4f3d17778575"
} ]
Однако я могу получить только пустой успешный ответ от URL-адресов отладчика:
>echo {"id":0,"method":"Page.navigate","params":{"url":"https://stackoverflow.com/"}}|curl -i "http://localhost:12345/devtools/page/19d24d3a-25b7-4ee8-a5cf-4f3d17778575" -H "Content-Type: application/json" -d -
HTTP/1.1 200 OK
Content-Length:0
Content-Type:text/plain
Такие команды, как Page.navigate, а также неверно сформированные запросы возвращают 200 OK, но ничего не выполняется.
Что мне не хватает ???

Вам нужно использовать веб-сокеты для управления таким хромом. Цитата chromedevtools.github.io:
Your application can discover available pages by requesting: http://localhost:9222/json and getting a JSON object with information about inspectable pages along with the WebSocket addresses that you could use in order to start instrumenting them
Вот как это будет работать (по крайней мере, на моем Mac):
docker pull deepsweet/chromium-headless-remote:69
docker run -it --rm -p 9222:9222 deepsweet/chromium-headless-remote:69
curl -i "http://localhost:9222/json"
HTTP/1.1 200 OK
Content-Length:361
Content-Type:application/json; charset=UTF-8
[ {
"description": "",
"devtoolsFrontendUrl": "/devtools/inspector.html?ws=localhost:9222/devtools/page/DC33B65CA373BE2770F2A1031C3B4CBF",
"id": "DC33B65CA373BE2770F2A1031C3B4CBF",
"title": "about:blank",
"type": "page",
"url": "about:blank",
"webSocketDebuggerUrl": "ws://localhost:9222/devtools/page/DC33B65CA373BE2770F2A1031C3B4CBF"
} ]
echo '{ "id":2, "method":"Page.navigate", "params":{"url": "http://www.stackoverflow.com"} }' | websocat -t - ws://localhost:9222/devtools/page/DC33B65CA373BE2770F2A1031C3B4CBF
В примере используется веб-сайт. Вы также можете написать простой скрипт, например здесь
curl -i "http://localhost:9222/json"
HTTP/1.1 200 OK
Content-Length:432
Content-Type:application/json; charset=UTF-8
[ {
"description": "",
"devtoolsFrontendUrl": "/devtools/inspector.html?ws=localhost:9222/devtools/page/DC33B65CA373BE2770F2A1031C3B4CBF",
"id": "DC33B65CA373BE2770F2A1031C3B4CBF",
"title": "Stack Overflow - Where Developers Learn, Share, & Build Careers",
"type": "page",
"url": "https://stackoverflow.com/",
"webSocketDebuggerUrl": "ws://localhost:9222/devtools/page/DC33B65CA373BE2770F2A1031C3B4CBF"
} ]
Ага, ты прав. Замена
ws://наhttp://должна была вызвать какой-то звонок, но я этого не слышал ...