За последние 24 часа нас посетили 20598 программистов и 1007 роботов. Сейчас ищут 435 программистов ...

Curl передать файл напрямую пользователю

Тема в разделе "PHP для новичков", создана пользователем Mnobody, 14 ноя 2013.

  1. Mnobody

    Mnobody Новичок

    С нами с:
    14 ноя 2013
    Сообщения:
    6
    Симпатии:
    0
    Есть авторизация (cURL) на некотором файлообменнике А (с которого можно скачивать только когда ты авторизирован). Есть мой сайт В (на котором выполняеться скрипт php который авторизируеться на сайте А) и есть пользователь С (человек, браузер) который заходит на мой сайт В, вставляет ссылку на файл(с сайта А) и у него должно начинаться скачивание этого файла. Проблема в том что файлов будет много и они будут большие, записывать их на своем сервере а потом отдавать клиенту не вариан. Вопрос как организовать что-ли перенаправление скачивания(даже не знаю как это назвать)? Тоисть нужно сделать так чтобы файл передавался напрямую с сайта А пользователю С.
    Уже пару дней пытаюсь это решить и у меня какой-то ступор...(бывает :)), так что прошу не отвечить в стиле:"Делай через cURL или через что-то еще." Но буду благодарен за пару строк кода (для понимания сути) и возможно несколько ссылок, а также за подсказку как что-то такое вопше правильно назывется.
    Всем спасибо.
     
  2. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Сразу много не покатит.
     
  3. Mnobody

    Mnobody Новичок

    С нами с:
    14 ноя 2013
    Сообщения:
    6
    Симпатии:
    0
    Моя вина, не так сформирмулировал. Я хотел сказать что нужно скачиваить много и больших файлов как аргумент в пользу передачи их на прямую. На самом деле будет скачиваться один файл за раз. Пользователь будет вписывать(вставлять) ссылку в поле и у него в браузере будет начинаться скачивание.
     
  4. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    прочитайте как принять и отправить файл на загрузку, что для этого потребуется.
     
  5. kimitake

    kimitake Новичок

    С нами с:
    14 ноя 2013
    Сообщения:
    10
    Симпатии:
    0
    если вы подделываете авторизацию, то должны же немножко понимать, из чего состоит запрос, так? когда вы авторизовались, при всех следующих запросах вы что-то шлете серверу, чтобы он вас узнавал (куки, ага), тогда он дает скачивать файлы. чтобы юзер сам мог качать, нужно чтобы он слал серверу те же куки, чтобы сервер признал его за своего. так нельзя.

    чтобы большие файлы не копились у вас на сервере, можно удалять.
     
  6. Mnobody

    Mnobody Новичок

    С нами с:
    14 ноя 2013
    Сообщения:
    6
    Симпатии:
    0
    Есть не один сайт которые уже умеет это делать, так что не нужно говорить мне что это невозможно!

    отправляю POST с нужными параметрами, получаю ответ. Нахожу в ответе ссылку на которую редиректится и перехожу по этой ссылке

    Код (Text):
    1. GET /File.aspx?e=dlinnyj_hash_kod HTTP/1.1
    также отправляю:
    Код (Text):
    1. Query strign paramentrs
    2. e=dlinnyj_hash_kod
    получаю:
    Код (Text):
    1. HTTP/1.1 302 Found
    2. Cache-Control: private
    3. Content-Type: text/html; charset=utf-8
    4. Location: /Error.aspx?aspxerrorpath=/File.aspx
    5. Server: Microsoft-IIS/7.5
    6. Access-Control-Allow-Origin: http://somesite.com
    7. X-AspNet-Version: 4.0.30319
    8. X-Powered-By: ASP.NET
    9. Date: Sat, 16 Nov 2013 21:21:37 GMT
    10. Content-Length: 153
    а должен получать:
    Код (Text):
    1. HTTP/1.1 200 OK
    2. Cache-Control: private
    3. Content-Length: 3238509
    4. Content-Type: image/gif
    5. Server: Microsoft-IIS/7.5
    6. Access-Control-Allow-Origin: http://somesite.com
    7. Content-Disposition: attachment; filename="some.gif"
    8. X-AspNet-Version: 4.0.30319
    9. X-Powered-By: ASP.NET
    10. Date: Sat, 16 Nov 2013 20:40:28 GMT
    Какие есть идеи? Что я упустил??
     
  7. Mnobody

    Mnobody Новичок

    С нами с:
    14 ноя 2013
    Сообщения:
    6
    Симпатии:
    0
    посылаю POST запрос, в ответ приходит должно приходить такое:
    JSON
    redirectUrl=http://s5905.somesite.pl/File.aspx?e=dlinnyj_hasz_kod
    refreshTopBar=False
    topBar=<div class="topbarLoginContainer"> html с 2-мя ссылками на картинки </div>
    trackingCodeJS=_gaq.push(['ch._trackEvent', 'Files', 'Download', 'Download_File']);
    Type=Redirect
    После этого в браузере начинаеться скачивание (если скачивать нормально с сайта, а не моим кодом).

    Я достаю из этого json-a url и вывожу в ссылку через echo <a href="'.$link.'" target="_blank"> link </a>
    Но вместо скачивание выдает окно:
    Object moved to <a href="/Error.aspx?aspxerrorpath=/File.aspx">here</a>.

    Что я упустил, что еще нужно проверить? Понимаю что сайт имеет минимальную защиту от такого рода ботов, какой она может быть? Что и как проверить чтобы доделать скачивание?
     
  8. Dmitriy427

    Dmitriy427 Новичок

    С нами с:
    30 окт 2013
    Сообщения:
    53
    Симпатии:
    0
    Вам отдают не прямую ссылку на файл, а данные для скрипта, формирующего редирект, нужно смотреть яваскрипт и делать аналогичный запрос средствами php, видимо.
     
  9. Mnobody

    Mnobody Новичок

    С нами с:
    14 ноя 2013
    Сообщения:
    6
    Симпатии:
    0
    Вот про это и спрашиваю?
    Что и как проверять? Где узнать о этих методах защиты, какие они бываю и т.д.?

    По запросе возвращаеться тоже самое что и по ссылке.
     
  10. Dmitriy427

    Dmitriy427 Новичок

    С нами с:
    30 окт 2013
    Сообщения:
    53
    Симпатии:
    0
    Просто воспроизводите методично все данные отсылаемые в запросах браузером, никакие методы защиты скачать файл на сервер вам не помешают. Вот передать прямую ссылку в браузер клиента скорее всего не получится, её может вообще не существовать в природе, храниться файл и в базе может, или в облаке, или тривиально на диске, но отдаваться через скрипт все равно...
     
  11. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Если сервер раздающий файлы активно сопротивляется прямым ссылкам, то прямые ссылки не работают (сюрприз!).
    Если сервер раздающий файлы допускает расшаривание файлов — расшаривайте и получайте законную ссылку.

    Ваш К.О.
     
  12. Mnobody

    Mnobody Новичок

    С нами с:
    14 ноя 2013
    Сообщения:
    6
    Симпатии:
    0
    Удалось сделать скачивание. В основном из-за того что сайт плохо защищен.
    Я просто не заметил в длинном хэш коде ответа(фомата json) знак \u0026, который в последующем get запросе нужно заменить на &. Таким образом будет посылаться два параметра а не один, как я делал раньше.

    Но теперь сайт устанавливает сессионные куки. Насколько это безопасно?