Какое расположение содержимого использовать при ответе на запрос cURL? - PullRequest
0 голосов
/ 20 мая 2019

Допустим, у нас есть клиент (который на самом деле является PHP-скриптом на стороне сервера) и сервер (который также является PHP-скриптом на стороне сервера).

Клиент отправляет HTTP-запрос на сервер через cURL. Клиент принимает text/csv, поэтому соответствующий заголовок установлен, и клиент хотел бы сохранить ответ в файл, поэтому опция CURLOPT_FILE установлена ​​правильно.

Вопрос в том, должен ли сервер при обслуживании запроса отправлять обратно «закодированный» CSV-контент, должен ли он использовать inline или attachment в качестве значения для Content-Disposition заголовка?

Очень простой псевдокод для тестирования: сервер делает что-то вроде этого:

if (file_exists($attachment_location)) {
    header($_SERVER["SERVER_PROTOCOL"] . " 200 OK");
    header("Cache-Control: public"); // needed for internet explorer
    header("Content-Type: text/csv");
    header("Content-Length:".filesize($attachment_location));
    header("Content-Disposition: inline");
    readfile($attachment_location);
    die();
} else {
    header($_SERVER["SERVER_PROTOCOL"] . " 404 Not found");
}

Или это должно быть что-то вроде:

<?php
$attachment_location = "./c3m.csv";

if (file_exists($attachment_location)) {
    header($_SERVER["SERVER_PROTOCOL"] . " 200 OK");
    header("Cache-Control: public"); // needed for internet explorer
    header("Content-Type: text/csv");
    header("Content-Transfer-Encoding: Binary");
    header("Content-Length:".filesize($attachment_location));
    header("Content-Disposition: attachment; filename=c3m.csv");
    readfile($attachment_location);
    die();
} else {
    header($_SERVER["SERVER_PROTOCOL"] . " 404 Not found");
}

1 Ответ

2 голосов
/ 20 мая 2019

cURL не заботится о Content-Disposition, поэтому он не должен иметь никакого отношения к тому, какое значение вы ему даете.

...