Похоже, не удается загрузить CSV с использованием PHP Curl, когда ответ — content-disposition: вложение

#php #http #curl

#php #http #curl

Вопрос:

Я пытаюсь загрузить CSV-файл с URL-адреса с помощью PHP Curl, но ответ Curl — это HTML страницы, а не CSV. Как мне это исправить?

Я попытался сопоставить refererer и user-agent.

Спасибо!

Вот рабочий запрос в Firefox:

 GET [someURL] HTTP/1.1
Host: [someHost]
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: [someReferer]
Cookie: [some cookie data, including jsession]
  

и вот ответ:

 HTTP/1.1 200 OK
Content-Type: text/csv
Date: Sun, 05 Jun 2011 00:33:21 GMT
Expires: Sun, 05 Jun 2011 00:34:21 GMT
Content-Disposition: attachment; filename=[some file name.csv]
Connection: Keep-Alive
Last-Modified: Sun, 05 Jun 2011 00:33:21 GMT
X-Powered-By: Servlet/2.5 JSP/2.1
Content-Length: 5012
  

Комментарии:

1. URL, к которому вы подключаетесь, является секретным?

2. пожалуйста, добавьте исходный код curl или командную строку.

Ответ №1:

Я думаю, что тот вариант, который вы ищете, это -J:

От http://curl.haxx.se/docs/manpage.html#-J:

-J, —remote-header-name

(HTTP) Этот параметр указывает параметру -O, —remote-name использовать указанное сервером имя файла Content-Disposition вместо извлечения имени файла из URL.

Ответ №2:

Попробуйте использовать curl -L -O http://example.com/filename.csv

Это заглавная буква «о», а не ноль. Это указывает curl следовать любым перенаправлениям и использовать имя файла из content-disposition заголовка.