PHP
0
Вклад в тег
class Program
{
static void Main(string[] args)
{
string link = @"D:\csharp_server\program\program\bin\Debug\net5.0\includes\php\win86\php-cgi.exe", //ссылка на CGI
text = @"D:\csharp_server\program\program\bin\Debug\net5.0\www\UPPDD\php\auth.php"; // ссылка на файл где идет использование POST/GET
Console.WriteLine(UseInterpreter(link, text));// вывод в консоль для просмотра
Console.ReadKey();
}
static string UseInterpreter(string php, string file)
{
ProcessStartInfo info = new ProcessStartInfo(php);
string req = "login=admin&pass=secretpass&but=%D0%92%D0%BE%D0%B9%D1%82%D0%B8"; // параметры формы
info.UseShellExecute = false;
info.ErrorDialog = false;
info.RedirectStandardError = true;
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.CreateNoWindow = true;
// переменные среды
info.EnvironmentVariables.Add("REQUEST_METHOD", "POST");
info.EnvironmentVariables.Add("HTTP_CONNECTION", $"keep-alive");
info.EnvironmentVariables.Add("REDIRECT_STATUS", "false");
info.EnvironmentVariables.Add("GETAWAY_INTERFACE", "CGI");
info.EnvironmentVariables.Add("CONTENT_TYPE", "application/x-www-form-urlencoded");
info.EnvironmentVariables.Add("CONTENT_LENGTH", Encoding.UTF8.GetBytes(req).Length.ToString());
info.EnvironmentVariables.Add("HTTP_ACCEPT", "*.*");
info.EnvironmentVariables.Add("SCRIPT_FILENAME", file);
// передеча информации в Process и старт процесса
Process p = new Process();
p.StartInfo = info;
bool pStarted = p.Start();
StreamWriter input = p.StandardInput; // стандартынй поток ввода
input.WriteLine(req); // ввод
StreamReader output = p.StandardOutput; // поток вывода
StreamReader error = p.StandardError; // поток вывода ошибки
// перекодировка, при наличии кириллицы php выводит в кодировке cp866, тут мы переводим из cp866 в utf8
byte[] cp866_byte = output.CurrentEncoding.GetBytes(output.ReadToEnd());
string cp866_byte_to_utf8 = Encoding.UTF8.GetString(cp866_byte);
return cp866_byte_to_utf8;
}
}