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