Просмотр содержимого файла с помощью Content-disposition: вложение с использованием сокета - PullRequest
1 голос
/ 04 февраля 2010

Я хочу проанализировать содержимое динамического файла .csv. Тем не менее, этот код (очевидно, с именами файлов duff и т. Д.):

$socket = fsockopen("www.example.com", 443);
fwrite($socket, "GET /dynamicCsv.csv?param=value HTTP/1.1\r\n");
fwrite($socket, "Host: www.example.com\r\n");
fwrite($socket, "Connection: close\r\n");
fwrite($socket, "\r\n");

while(!feof($socket)) echo fgets($socket);

... просто скачивает файл.

Используя openssl в командной строке, я могу напечатать точно такой же запрос и получить следующий ответный заголовок:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-disposition: attachment; filename=dynamicCsv.csv
Pragma: public
Cache-Control: max-age=0
Set-Cookie: SESSIONID=ASDFUHN023UIN0F; Path=/; Secure
Content-Type: text/csv;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 04 Feb 2010 16:53:00 GMT

Чтобы избежать автоматической загрузки файла, я попытался отрубить первый символ, используя substr, в надежде, что, возможно, браузер увидит вывод ответа fgets как набор заголовков текущего документа. Это не сработало. Следуя той же идее, я также попытался вставить несколько строк строки перед открытием сокета, что тоже не сработало.

Мои два вопроса:

  1. С какой стати браузер считает, что должен загрузить файл?
  2. Как я могу это остановить?

Я должен упомянуть, что до сих пор использовал только Chrome, но я не понимаю, почему это будет иметь значение.

Большое спасибо, Andreas

Ответы [ 2 ]

1 голос
/ 04 февраля 2010

Хорошо, мне действительно удалось решить это самостоятельно. Для справки, вместо удаления вопроса я добавляю этот ответ с исправлением.

Проблема была в том, что в

fsockopen("www.example.com", 443);

Я не указал использовать протокол ssl. Таким образом, вместо этого введите:

fsockopen("ssl://www.example.com", 443);
0 голосов
/ 04 февраля 2010

Вы можете использовать cURL или некоторые другие оболочки для него.

...