Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Curl只能读取前2000个字节吗?_Php_C++_C_Curl - Fatal编程技术网

Php Curl只能读取前2000个字节吗?

Php Curl只能读取前2000个字节吗?,php,c++,c,curl,Php,C++,C,Curl,我使用了curl和char URL[]=”file:///d:/temporal/prueba1.txt“以便使用硬盘驱动器文件进行测试,以便测试接收到的数据 我有以下问题: 跳过大文件中的前2个字符:-已解决-读取数据时出错 我只想读一次(最好是前2000个字符),它是否存在一个curl命令 如果我在writer文件中创建: long longitud=strlen(datain),我得到的longitud比size*nmemb大得多 Curl无法通过公司网络,但URLOpenBlocking

我使用了curl和char URL[]=”file:///d:/temporal/prueba1.txt“以便使用硬盘驱动器文件进行测试,以便测试接收到的数据

我有以下问题:

  • 跳过大文件中的前2个字符:-已解决-读取数据时出错
  • 我只想读一次(最好是前2000个字符),它是否存在一个curl命令
  • 如果我在writer文件中创建: long longitud=strlen(datain),我得到的longitud比size*nmemb大得多
  • Curl无法通过公司网络,但URLOpenBlockingStream()+read()可以
  • 有时,Curl会从url读回大量错误数据。我认为发生了连接错误,但我不理解
  • 这是节目。(注意:pull_one_url()是使用线程调用的):

    以下是writer函数:

    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;     }
    
    静态大小写入程序(void*vdata、size\t size、size\t nmemb、void*vbuffer\u in){
    char*datain=(char*)vdata;
    char*buffer\u in=(char*)vbuffer\u in;
    nmemb*=size;//不再需要乘法
    //long longitud=strlen(datain);//longitud始终大于nmemb
    //缓冲区里有东西吗?
    if((buffer_in!=NULL)&&(buffer_in[0]='\0')//注意,仅当buffer为空时读取!!!
    { 
    //strcat(buffer_in,data);///SIRVE si el fichero es de mas de 16kb OJO!
    
    如果(nmembCURLOPT_)范围允许您请求文件/资源的一部分:


    谢谢。我发现curl将ASCII:“0d0a”更改为“0d0d0a”OK!!你说得对,Daniel。如果使用fprintf在文件中写入时在回车前添加0x0d,则会出现问题。因此我必须以二进制模式打开:
    fopen(“output.txt”,“wb”)
    @Daniel Stenberg
    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;     }