Как загрузить файл по URL-адресу в C, как это сделал бы браузер?

Я хочу загрузить файл по URL-адресу, вот этот: http://download.finance.yahoo/d/quotes.csv?s=YHOO+GOOG+MSFT&f=sl1d1t1c1hgvbap2Когда я открываю браузер и ввожу этот URL-адрес в моем браузере, файл автоматически загружается, как и должно. Я хочу загрузить этот файл, не заходя в браузер, используя программу на языке C, мне нужна эта информация для финансового проекта. Я пытался загрузить файл с использованием libcurl, но libcurl загружает HTML-страницу, соответствующую этому URL-адресу, который, конечно, пуст, потому что единственное, что делает этот URL-адрес, — это запускает загрузку. Я полагаю, что этот URL-адрес — это путь к HTTP-серверу какого-то типа, но я полностью потерялся о том, как получить этот файл.

Заранее благодарим вас за ваше время и помощь, пожалуйста, если вы можете помочь, объяснив или даже лучше с кодом C, не стесняйтесь делать это и не бойтесь быть слишком точными.


Используйте libcurl и посмотрите эту страницу с примерами.

Если вы хочу заставить его работать, заставить его работать с в командной строке curl и используйте параметр - libcurl . Я подозреваю, что проблема может быть больше связана с javascript, куки, логином или чем-то еще. Все это разрешимо, но поиграйте с командной строкой, чтобы заставить ее работать. Мой диагноз заключается в том, что в вашем URL отсутствует .com после yahoo .

Например:

  curl --silent --libcurl/tmp/test.c 'http://download.finance.yahoo.com/d/quotes.csv?s=YHOO+GOOG+MSFT&f=sl1d1t1c1hgvbap2'   

выводит вывод на экран:

  «YHOO», 51.04, «11/21/2014», «4:  00pm », - 0,21,52,25,50,99,22226984, N/A, 52,49,« - 0,41% »« GOOG », 537,50,« 21.11.2014 »,« 16:00 », +2,67,542,14,536,56,  2218249, н/д, 575.00, «+ 0.50%» «MSFT», 47.98, «21.11.2014», «16:00», - 0,72,49.05,47.57,42884796, н/д, 49.05, «-  1.48% " 

и создает код:

 /********* Пример кода, сгенерированный  инструмент командной строки curl ********** * Все параметры curl_easy_setopt () задокументированы по адресу: * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html ********  *************************************************  **************/# include  intmain (int argc, char * argv []) {CURLcode ret;  CURL * hnd;  hnd = curl_easy_init ();  curl_easy_setopt (hnd, CURLOPT_URL, "http://download.finance.yahoo.com/d/quotes.csv?s=YHOO+GOOG+MSFT&f=sl1d1t1c1hgvbap2");  curl_easy_setopt (hnd, CURLOPT_NOPROGRESS, 1L);  curl_easy_setopt (hnd, CURLOPT_USERAGENT, "curl/7.35.0");  curl_easy_setopt (hnd, CURLOPT_MAXREDIRS, 50L);  curl_easy_setopt (hnd, CURLOPT_TCP_KEEPALIVE, 1L); /* Вот список опций, которые использовал код curl, который не может быть легко сгенерирован в качестве источника.  Вы можете либо не использовать их, либо реализовать их самостоятельно.. CURLOPT_WRITEDATA набор к набору objectpointer CURLOPT_WRITEFUNCTION к набору functionpointer CURLOPT_READDATA к набору objectpointer CURLOPT_READFUNCTION к набору functionpointer CURLOPT_SEEKDATA к набору objectpointer CURLOPT_SEEKFUNCTION к functionpointer CURLOPT_ERRORBUFFER набора к набору objectpointer CURLOPT_STDERR к набору objectpointer CURLOPT_HEADERFUNCTION к набору functionpointer CURLOPT_HEADERDATA к objectpointer  */ret = curl_easy_perform (hnd);  curl_easy_cleanup (hnd);  hnd = NULL;  return (int) ret;}/**** Конец примера кода ****/ 


Простая программа C, C ++ для загрузить файл по URL-адресу в Интернете

,

Эта программа подключается к Интернету и загружает исходный HTML-код веб-страницы. Он использует Win32 API URLOpenBlockingStream для открытия IStream на веб-странице. Цикл используется для потоковой передачи байтов.

  • Поддерживает протоколы http и https.
  • На дату публикации этой статьи мы проверили, что программа также поддерживает перенаправления, как с http на https, так и наоборот.

ВАЖНОЕ ПРИМЕЧАНИЕ: ТОЛЬКО ДЛЯ WINDOWS. ТРЕБУЕТСЯ КОМПИЛЯТОР С УСТАНОВЛЕННЫМИ ОКНАМИ. КОМПИЛЯЦИЯ С ИСПОЛЬЗОВАНИЕМ Visual Studio C ++, Visual C ++ Express, любого выпуска, любой версии

План

Есть много вариантов для реализации эта программа, но следующая самая простая.

  1. Используйте Win32 API URLOpenBlockingStream для получения интерфейса IStream для веб-адреса.
  2. Второй параметр — URL-адрес. http://и https://работают оба протокола. Остальные четыре — стандартные стандартные значения по умолчанию. Если эта функция завершается успешно, она возвращает 0, в противном случае — код ошибки, отличный от нуля.
  3. После того, как IStream доступен, функция «Чтение» может использоваться в цикле для загрузки байтов.
  4. Байты собираются в строку. Это не очень эффективный способ построения длинной строки. Я использовал его, чтобы код был читабельным. См. Ссылку на stackoverflow ниже для лучшего метода.

Исходный код

//ТОЛЬКО ДЛЯ WINDOWS//НУЖДАЕТСЯ НАСТРОЙКА WINDOWS//КОМПИЛЯЦИЯ С ИСПОЛЬЗОВАНИЕМ Visual Studio Express,//Visual C ++ Express или любого выпуска//любой версии #pragma comment (lib, "urlmon.lib") # include  #include  #  include  #include  #define getURL URLOpenBlockingStreamAusing namespace std;//c программа для загрузки файла по url int main () {//интерфейс Windows IStream IStream * stream;  const char * URL = "http://google.com"; //вызов URL-адреса//ненулевой возврат означает некоторую ошибку if (getURL (0, URL, & stream, 0, 0)) {cout  Read (buff, 100, & bytesRead);  if (0U == bytesRead) {break;}//добавляем и собираем в строку s.append (buff, bytesRead);};//освобождаем интерфейс//хорошая практика программирования stream-> Release ();//отображаем  cout  

Комментарии и обсуждение

Напишите свои комментарии и обсуждение непосредственно к следующему видео на YouTube:

Оцените статью
clickpad.ru
Добавить комментарий