Intereting Posts
какова роль ob_start () здесь Как сохранить выбранное значение поля выбора после формы POST или GET Уязвимости от mysql_escape_string jquery не извлекает результаты из json на основе ввода поиска? Маршрутные столкновения в Ларавеле 4 Получение минимальной суммы заказа для метода «Бесплатная доставка» на странице проверки Преобразование национальных символов в их латинские эквиваленты в PHP PHP – альфа сортирует строки из нескольких файлов в одном каталоге и сохраняет их в файлах с максимальными строками «x» в папках с именованными именами Учитывая местоположение пользователя, выберите строки, которые включают этого пользователя в их радиус как иметь несколько фильтров для ввода в PDO установка выбранной опции тега select с помощью jquery Доступ к URL-адресам по адресу www.example.com/page вместо www.example.com/page.php Как обнаружить повторяющиеся значения в массиве PHP? Юникод-суррогатные пары PHP-скрипт, который работает навсегда :)

Может ли Curl читать только первые 2000 байт?

Я использовал curl с char URL [] = "file: /// d: /temporal/prueba1.txt", чтобы проверить использование файла жесткого диска, чтобы получить полученные данные.

У меня следующие проблемы:

  1. Пропускает первые 2 символа в больших файлах: -разработано – это была ошибка чтения данных
  2. Я бы хотел прочитать только один раз (предпочтительнее первые 2000 символов). Для этого существует команда curl?
  3. Если я сделаю в файле записи: long longitud = strlen (datain), я получаю longitud намного больше размера * nmemb
  4. Curl не может проходить через корпоративную сеть, но URLOpenBlockingStream () + read () может это сделать
  5. Иногда Curl считывает много ошибочных данных из url. Я думаю, что произошла ошибка подключения, но я не понимаю

Это программа. (Примечание: pull_one_url () вызывается с помощью потоков):

static void *pull_one_url(void *ii){ ix_bloque=initialize(); lee_curl_c *lee_curl;//Curl class CURL *curl; CURLcode result; curl = curl_easy_init(); // Create our curl handle char errorBuffer[CURL_ERROR_SIZE]=""; char user_agent[]="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"; // Write all expected data in here if (curl) { curl_easy_setopt(curl, CURLOPT_USERAGENT,user_agent); curl_easy_setopt(curl, CURLOPT_PORT, PC_PORT_a); // Check this before using curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer); curl_easy_setopt(curl, CURLOPT_URL, lee_curl->url[ix_bloque]); curl_easy_setopt(curl, CURLOPT_HEADER, 0); curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, D_TIMEOUT);//240 segundos curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 0);//SOLO primer http, ignorar sucesivos curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &writer); curl_easy_setopt(curl, CURLOPT_WRITEDATA, lee_curl->buffer[ix_bloque]); curl_easy_setopt(curl, CURLOPT_VERBOSE, VERBOSE_url);//Para ver que esta pasando // Attempt to retrieve the remote page result = curl_easy_perform(curl); if (errorBuffer[0]) { fprintf(stderr, "\n##Tarea %li ERROR EN %s DEBIDO A: %s",ix_bloque,lee_curl->url[ix_bloque],errorBuffer); lee_curl->estado[ix_bloque]=2;//error } else { fprintf(stderr, "\n##Tarea %li NO ERROR EN %s ",ix_bloque,lee_curl->url[ix_bloque]); lee_curl->estado[ix_bloque]=1;//Lleno } // Always cleanup curl_easy_cleanup(curl); } return NULL; } 

Вот функция записи:

 static size_t writer(void *vdata, size_t size, size_t nmemb, void *vbuffer_in){ char *datain=(char *) vdata; char *buffer_in=(char *) vbuffer_in; nmemb*=size;//No multiplication needed anymore //long longitud=strlen(datain);//longitud always larger than nmemb // Is there anything in the buffer? if ( (buffer_in != NULL) && (buffer_in[0]=='\0') ) //CAUTION, reads only if buffer is empty!!! { //strcat(buffer_in,data); //SIRVE si el fichero es de mas de 16kb OJO! if (nmemb<(D_BUFFER_SIZE-1)) { memcpy(buffer_in,datain,nmemb); buffer_in[nmemb]='\0';//end of string fprintf(stderr,"\n###SUCCESSFUL, loaded : %li bytes",nmemb); } else { memcpy(buffer_in,data,D_BUFFER_SIZE); buffer_in[D_BUFFER_SIZE-1]='\0';//end of string fprintf(stderr,"\n###WARNING, trying to load %li LARGER THAN %li",nmemb,D_BUFFER_SIZE); fprintf(stderr," El tamano maximo curl=%li = %likB",CURL_MAX_WRITE_SIZE,CURL_MAX_WRITE_SIZE/1024); } return nmemb; } return 0; } 

CURLOPT_RANGE позволяет запросить часть файла / ресурса:

http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTRANGE