비지박스 환경에 컬이나 wget이 없기 때문에 서버(google)로부터 http 헤더 응답을 얻으려면 텔넷을 사용해야 합니다. 또한 저는 프록시 뒤에 있습니다. 따라서 명령줄에서 다음을 성공적으로 수행할 수 있습니다.
$ telnet proxy.ip port
HEAD http://www.google.com/ HTTP/1.1
{hit enter twice}
HTTP/1.1 200 OK
Date: Tue, 15 Jan 2019 09:11:28 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
entire header follows...
하지만 쉘 스크립트에 넣는 방법을 모르겠습니다. 내가 시도한 것은 다음과 같습니다.
#!/bin/sh
(
echo "GET http://www.google.com/ HTTP/1.1"
echo
echo
echo "exit"
) | telnet proxy.ip port
그러나 그것은 나에게 전혀 출력을 제공하지 않습니다.
답변1
입력 및 출력 스트림을 제어하려면 다음을 수행할 수 있습니다.
#!/usr/bin/env bash
proxy_host="example.proxy.local"
proxy_port="8080"
uri="http://www.google.com/"
# This is the STDIN for telnet, keep in mind that this needs to be running
# as long as the request is handled. You can test the result by removing the
# sleep.
send_headers () {
# Note the use of HTTP/1.0. 1.1 would keep the connection open
# and you will need to wait for the 10 second timout below.
echo "GET $uri HTTP/1.0"
echo
echo
# 10 second timeout to keep STDIN open
sleep 10
}
# This reads the telnet output per line, do your stuff here
while read -r line; do
echo "$line"
done < <(telnet "$proxy_host" "$proxy_port" < <(send_headers))
구문은 command1 < <(command2)
단지 역파이프입니다( 와 동일 command2 | command1
). 이 예에서는 command2의 STDOUT 파일 설명자를 command1의 STDIN 파일 설명자에 연결합니다. 이 방법의 단점은 해당 파이프라인의 모든 "명령"을 실행해야 작동한다는 것입니다. 절전 모드가 제거되면 telnet 명령이 조기에 종료됩니다. 좋은 소식은 HTTP/1.0을 사용하면 10초의 send_headers 시간 제한을 기다리지 않고도 연결이 닫히고 파이프가 깔끔하게 닫힌다는 것입니다.
참고: 코드를 테스트할 프록시가 없으므로 귀하에게 도움이 되기를 바랍니다. :)