проблемы с загрузкой файлов cURL

1

Я пытаюсь загрузить файл с диска Google, но когда я играю в скрипт, он дает мне следующую ошибку:

Moved Temporarily

The document has moved here.

Мой код приведен ниже:

$source = "https://docs.google.com/uc?id=0B8tmy5YxFFGhM0szSUZWVl9qQWc&export=download";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $source);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 2);
curl_setopt($ch, CURLOPT_SSLVERSION,3);
echo $data = curl_exec($ch);
echo $error = curl_error($ch); 


//print_r($ch);


$destination = "data.csv";
$file = fopen($destination, "w+");
fputs($file, $data);
fclose($file);

curl_close ($ch);
Теги:
curl
google-docs-api

4 ответа

1
Лучший ответ
function gett($url) {
$url = str_replace(" ", '%20', $url);
fopen("cookies.txt", "w");
$parts = parse_url($url);
$host = $parts['host'];
$ch = curl_init($url);
$header = Array('Connection:keep-alive',
'Proxy-Connection: Close',
'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1017.2 Safari/535.19',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: en-US,en;q=0.8',
'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Connection: Close);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_USERAGENT, $_REQUEST['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}

используйте эту функцию.it будет работать

  • 0
    Можете ли вы объяснить, почему это будет работать? Какие ключевые части в вашем коде?
1

Добавьте это в свой скрипт, и все будет в порядке.

В настоящее время ваш скрипт просто выглядит в URL-адресе, который вы указываете, и не выполняет перенаправления. Поэтому добавьте это, и тогда ваш скрипт попытается указать URL-адрес, указанный вами в поле url, а затем перейдет через все перенаправления и вернет окончательные данные, файл или что-то еще.

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

  • 0
    Спасибо за ваш ответ, но теперь он не загружает файл с содержимым, теперь он получает html-страницу входа в Google в файле .csv .. :( Мне нужно загрузить точное содержимое, как оно есть в $ source, скопируйте его Ссылка и чем скачать файл, а затем увидеть, что я хочу получить точный файл .csv.
  • 0
    Это означает, что вам нужно войти в Google, чтобы получить то, что вы ищете. Сделайте запрос CURL POST для входа в систему, curl для получения и сохранения cookies а затем сделайте запрос на get с прикрепленными cookies .
1

Добавьте это к вам

curl_setopt($ch, CURLOPT_FOLLOWLOCATION , true);

Так что ваш код cule будет

$source = "https://docs.google.com/uc?id=0B8tmy5YxFFGhM0szSUZWVl9qQWc&export=download";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $source);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 2);
curl_setopt($ch, CURLOPT_SSLVERSION,3);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION , true);
echo $data = curl_exec($ch);
echo $error = curl_error($ch); 

Это значит

Это означает, что libcurl повторно отправит тот же запрос в новое место и последует за новым местоположением:

  • 0
    Спасибо за ваш ответ, но теперь он не загружает файл с содержимым, теперь он получает html-страницу входа в Google в файле .csv .. :( Мне нужно загрузить точное содержимое, как оно есть в $ source, скопируйте его ссылку, а затем скачать файл, а затем увидеть, что я хочу получить точный файл .csv ..
  • 0
    Вы прошли страницу входа в Google?
Показать ещё 1 комментарий
1

Похоже, вы получаете перенаправление. Вы можете попросить curl следовать переадресации следующим образом:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  • 0
    Спасибо за ваш ответ, но теперь он не загружает файл с содержимым, теперь он получает html-страницу входа в Google в файле .csv .. :( Мне нужно загрузить точное содержимое, как оно есть в $ source, скопируйте его Ссылка и чем скачать файл, а затем увидеть, что я хочу получить точный файл .csv.
  • 0
    @DeDevelopers Документы на Google диск требуют логин для загрузки. Вам нужно будет, чтобы скрипт curl отправлял имя пользователя и пароль и сохранял возвращенный файл cookie.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню