За последние 24 часа нас посетили 18889 программистов и 1630 роботов. Сейчас ищут 949 программистов ...

file_get_content: одновременно авторизация basic и отправка

Тема в разделе "Прочие вопросы по PHP", создана пользователем whoim, 3 май 2014.

  1. whoim

    whoim Активный пользователь

    С нами с:
    30 июл 2011
    Сообщения:
    25
    Симпатии:
    0
    и отправка файла в форме?
    Задача:
    1) авторизоваться basic auth
    2) отправить файл

    по отдельности задачи решаются, вместе, зараза - никак..
    последняя попытка была:
    Код (Text):
    1.  
    2. .....
    3. $csv_file = realpath('data.csv');
    4. $data = array(
    5.     'username' => $username,
    6.     'password' => $password,
    7.     'uploadcsv' => "",
    8.     'csv_type' => "input",
    9.     'csvFile' => "@".$csv_file,
    10.     'default_email' => "",
    11.     'override_email' => "",
    12.     'email_from' => "",
    13.     'email_replyto' => "",
    14.     'email_subject' => "",
    15.     'email_body_open' => "",
    16.     'email_body_close' => ""
    17. );
    18. $options = array(
    19.     'http' => array(
    20.         'header'  => "Authorization: Basic ".base64_encode("$username:$password"),
    21.         'method'  => "POST",
    22.         'content' => ""
    23.     ),
    24.     'http' => array(
    25.         'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
    26.         'method'  => "POST",
    27.         'content' => http_build_query($data)
    28.     )
    29. );
    30. $url = "http://$hostname/admin/config.php?display=bulkextensions";
    31. $context  = stream_context_create($options);
    32. $result = file_get_contents($url, false, $context);
    33. print($result);
    Добавлено спустя 34 минуты 35 секунд:
    Попробовал вариант с сохранением куков. Однако, basic auth
    1) не передается в куках
    2) не "запоминается" иначе сервером

    и "второй проход" упирается в 401.
    Как передать PHP_AUTH* одновременно с заголовком формы? Браузер же так делает, один раз спросил - и забыл

    Код (Text):
    1.  
    2.  
    3. #логин и пароль
    4. $data = http_build_query(
    5.   array(
    6.     'username' => $username,
    7.     'password' => $password
    8.   )
    9. );
    10.  
    11. #формируем заголовок
    12. $opts = array(
    13.         'http'=>array(
    14.         'method'=>"POST",
    15.         'header'=>"Authorization: Basic ".base64_encode("$username:$password")."\r\n".
    16.         "User-Agent : Opera/9.80 (X11; Linux i686; U; ru) Presto/2.7.62 Version/11.00 \r\n".
    17.         "Accept-Language: ru-RU,ru;q=0.9,en;q=0.8 \r\n".
    18.         "Accept-Charset:utf-8, utf-16, *;q=0.1 \r\n".
    19.         "Accept-Encoding:identity, *;q=0",
    20.         'content' => $data
    21.     )
    22.  );
    23.  
    24. #запрос на авторизацию
    25.  $context = stream_context_create($opts);
    26.  $result = file_get_contents("http://$hostname/admin/config.php?display=bulkextensions", false, $context);
    27.  $coo = Array();
    28.  foreach( $http_response_header as $head){
    29.  if(stristr($head, 'Set-Cookie:' )) $coo[] = (str_ireplace('Set-Cookie:', '', $head ));
    30.  }
    31.  $coo = implode('; ',$coo);
    32.  
    33.  #второй запрос
    34. $csv_file = realpath('data.csv');
    35. $data = array(
    36.     'uploadcsv' => "",
    37.     'csv_type' => "input",
    38.     'csvFile' => "@".$csv_file,
    39.     'default_email' => "",
    40.     'override_email' => "",
    41.     'email_from' => "info@vmclouds.ru",
    42.     'email_replyto' => "info@vmclouds.ru",
    43.     'email_subject' => "New account created",
    44.     'email_body_open' => "",
    45.     'email_body_close' => ""
    46. );
    47. #заголовок
    48. $opts = array(
    49.         'http'=>array(
    50.         'method'=>"POST",
    51.         '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".
    52.         "Accept-Language: ru-RU,ru;q=0.9,en;q=0.8 \r\n".
    53.         "Accept-Charset:utf-8, utf-16, *;q=0.1 \r\n".
    54.         "Accept-Encoding:identity, *;q=0 \r\n".
    55.         "Cookie: ".$coo,
    56.         'content' => $data
    57.         )
    58. );
    59. #получение данных
    60. $context = stream_context_create($opts);
    61. $result = file_get_contents("http://$hostname/admin/config.php?display=bulkextensions", false, $context);
    62. print($result);
    Добавлено спустя 15 минут 35 секунд:
    в общем, авторизацию basic провожу так ж)
    Код (Text):
    1. file_get_contents("http://$username:$password@$hostname/admin/config.php?display=bulkextensions", false, $context);
    кто бы мог подумать
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Re: file_get_content: одновременно авторизация basic и отпра

    В копилку B-)
     
  3. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    наверно, так можно ещё
    Код (PHP):
    1. $options = array(
    2.     'http' => array(
    3.         'header'  => "Authorization: Basic " . base64_encode("$username:$password") . "\r\nContent-type: application/x-www-form-urlencoded",
    4.         'method'  => "POST",
    5.         'content' => http_build_query($data)
    6.     )
    7. ); 
     
  4. whoim

    whoim Активный пользователь

    С нами с:
    30 июл 2011
    Сообщения:
    25
    Симпатии:
    0
    так срабатывает post текстовых данных, но не проходят файлы