bash で HTTPS の POST を模写するテクニック例。Content-Lentgth をちゃんと計算させることが大事。
HTTP の場合は openssl でなく nc “${SERVER}” “${PORT}” でよいと思う。この場合 sleep も要らない。
openssl の部分でレスポンスの悪いサーバーの場合 sleep 1 では足りないかもしれない。その場合は sleep 2 など増やして試してみる。逆にレスポンスのよいサーバーでは usleep 500000 (0.5 秒) がいいかもしれない。
#!/bin/bash USERNAME="hoge"; PASSWORD="fuga" SERVER="example.com"; PORT="443" CONTENT="username=${USERNAME}&password=${PASSWORD}" CONTENTLENGTH=$( expr "$( wc -c <<< "${CONTENT}" )" - 1 ) RESPONSE=$( ( echo -ne "POST /login.php HTTP/1.0\nContent-Length: ${CONTENTLENGTH}\n\n${CONTENT}" ; sleep 1 ) | openssl s_client -connect ${SERVER}: ${PORT} 2>&1 ) COOKIE=$( sed -n 's/^Set-Cookie: \(.*\)$/\1/p' <<< "${RESPONSE}" ) echo "COOKIE: ${COOKIE}" exit 0