За последние 24 часа нас посетили 15816 программистов и 1668 роботов. Сейчас ищут 807 программистов ...

Стандартная HTTP-авторизации.

Тема в разделе "PHP для новичков", создана пользователем Melefaro, 15 янв 2012.

  1. Melefaro

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

    С нами с:
    12 дек 2007
    Сообщения:
    7
    Симпатии:
    0
    Скрипт должен проходить стандартную HTTP-авторизации на другом сервере. Как это сделать?
    http://b23.ru/about/api/

    Инструкция на том сайте:
    Доступ: при обращении требует передать имя пользователя и API-ключ в качестве пароля в формате стандартной HTTP-авторизации.

    Вопрос: как передать логин и пароль для авторизации?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    сляпать запрос самостоятельно, видимо
     
  3. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
  4. Melefaro

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

    С нами с:
    12 дек 2007
    Сообщения:
    7
    Симпатии:
    0
    Спасибо, как это сделать с cURL разобрался, ничего сложного))
    Но как позже выяснилось, сервер не поддерживает cURL((
    Если "сляпать запрос самостоятельно", то будет примерно так:
    Код (Text):
    1.  
    2. <?php
    3. $fp = fsockopen("http://b23.ru/about/api/shorten/http:mail.ru", 80, $errno, $errstr, 30);
    4.  
    5. if (!$fp) echo "Error:$errstr ($errno)\n";
    6.  
    7. else {
    8.  
    9.     $out = "GET /  HTTP/1.0\r\n";
    10.  
    11.     $out .= "Host: http://b23.ru/about/api/shorten/http:mail.ru\r\n";
    12.     $out .= "BasicAuthentication: true\r\n";
    13.     $out .= "Password: Tigrann\r\n";
    14.     $out .= "Username: ovwhx9an\r\n";
    15.  
    16.    
    17.  
    18.     fwrite($fp, $out);
    19.  
    20.    
    21.     fclose($fp);
    22.  
    23. }
    24. ?>
    Возникает два вопроса. Как потом получить то, что нужно и как убрать ошибку:
    (Unable to find the socket transport "http" - did you forget to enable it when you configured PHP?) in Z:\home\test1.ru\www\socket.php on line 3
     
  5. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Практически всё, что умеет cURL можно сделать с помощью file_get_contents - любые заголовки, юзер-агенты там, можно отправлять также POST-запросы и т.п.
     
  6. Melefaro

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

    С нами с:
    12 дек 2007
    Сообщения:
    7
    Симпатии:
    0
    Всё равно не получается(
    Получился вот такой код:
    Код (Text):
    1. <?php
    2. // Создаем поток
    3. $opts = array(
    4.   'http'=>array(
    5.     'method'=>"GET",
    6.     'header'=>"BasicAuthentication: true\r\n" . "Login: MyLogin\r\n" . "Password: MyPassword\r\n"
    7.              
    8.   )
    9. );
    10.  
    11. $context = stream_context_create($opts);
    12.  
    13. // Открываем файл с помощью установленных выше HTTP-заголовков
    14. $file = file_get_contents('http://b23.ru/api/shorten/nm.ru', false, $context);
    15. print $file;
    16. ?>
    Выдаёт ошибку:
    Warning: file_get_contents(http://b23.ru/api/shorten/nm.ru) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 401 Unauthorized
     
  7. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Неправильно авторизуешься.

    Код (PHP):
    1. <?php
    2. $login = 'asd';
    3. $pass = 'qwe';
    4. $authCode = base64_encode($login . ':' . $pass);
    5. $opts = array(
    6.     'http' => array(
    7.         'method' => 'GET',
    8.         'header' => 'Authorization: Basic ' . $authCode
    9.     )
    10. );
    11. $context = stream_context_create($opts);
    12. // Открываем файл с помощью установленных выше HTTP-заголовков
    13. $file = file_get_contents('http://b23.ru/api/shorten/nm.ru', false, $context);
    14. print $file;
    15. ?>