и отправка файла в форме? Задача: 1) авторизоваться basic auth 2) отправить файл по отдельности задачи решаются, вместе, зараза - никак.. последняя попытка была: Код (Text): ..... $csv_file = realpath('data.csv'); $data = array( 'username' => $username, 'password' => $password, 'uploadcsv' => "", 'csv_type' => "input", 'csvFile' => "@".$csv_file, 'default_email' => "", 'override_email' => "", 'email_from' => "", 'email_replyto' => "", 'email_subject' => "", 'email_body_open' => "", 'email_body_close' => "" ); $options = array( 'http' => array( 'header' => "Authorization: Basic ".base64_encode("$username:$password"), 'method' => "POST", 'content' => "" ), 'http' => array( 'header' => "Content-type: application/x-www-form-urlencoded\r\n", 'method' => "POST", 'content' => http_build_query($data) ) ); $url = "http://$hostname/admin/config.php?display=bulkextensions"; $context = stream_context_create($options); $result = file_get_contents($url, false, $context); print($result); Добавлено спустя 34 минуты 35 секунд: Попробовал вариант с сохранением куков. Однако, basic auth 1) не передается в куках 2) не "запоминается" иначе сервером и "второй проход" упирается в 401. Как передать PHP_AUTH* одновременно с заголовком формы? Браузер же так делает, один раз спросил - и забыл Код (Text): #логин и пароль $data = http_build_query( array( 'username' => $username, 'password' => $password ) ); #формируем заголовок $opts = array( 'http'=>array( 'method'=>"POST", 'header'=>"Authorization: Basic ".base64_encode("$username:$password")."\r\n". "User-Agent : Opera/9.80 (X11; Linux i686; U; ru) Presto/2.7.62 Version/11.00 \r\n". "Accept-Language: ru-RU,ru;q=0.9,en;q=0.8 \r\n". "Accept-Charset:utf-8, utf-16, *;q=0.1 \r\n". "Accept-Encoding:identity, *;q=0", 'content' => $data ) ); #запрос на авторизацию $context = stream_context_create($opts); $result = file_get_contents("http://$hostname/admin/config.php?display=bulkextensions", false, $context); $coo = Array(); foreach( $http_response_header as $head){ if(stristr($head, 'Set-Cookie:' )) $coo[] = (str_ireplace('Set-Cookie:', '', $head )); } $coo = implode('; ',$coo); #второй запрос $csv_file = realpath('data.csv'); $data = array( 'uploadcsv' => "", 'csv_type' => "input", 'csvFile' => "@".$csv_file, 'default_email' => "", 'override_email' => "", 'email_from' => "info@vmclouds.ru", 'email_replyto' => "info@vmclouds.ru", 'email_subject' => "New account created", 'email_body_open' => "", 'email_body_close' => "" ); #заголовок $opts = array( 'http'=>array( 'method'=>"POST", 'header'=>"Content-type: application/x-www-form-urlencoded\r\n User-Agent : Opera/9.80 (X11; Linux i686; U; ru) Presto/2.7.62 Version/11.00 \r\n". "Accept-Language: ru-RU,ru;q=0.9,en;q=0.8 \r\n". "Accept-Charset:utf-8, utf-16, *;q=0.1 \r\n". "Accept-Encoding:identity, *;q=0 \r\n". "Cookie: ".$coo, 'content' => $data ) ); #получение данных $context = stream_context_create($opts); $result = file_get_contents("http://$hostname/admin/config.php?display=bulkextensions", false, $context); print($result); Добавлено спустя 15 минут 35 секунд: в общем, авторизацию basic провожу так ж) Код (Text): file_get_contents("http://$username:$password@$hostname/admin/config.php?display=bulkextensions", false, $context); кто бы мог подумать
наверно, так можно ещё Код (PHP): $options = array( 'http' => array( 'header' => "Authorization: Basic " . base64_encode("$username:$password") . "\r\nContent-type: application/x-www-form-urlencoded", 'method' => "POST", 'content' => http_build_query($data) ) );