【问题标题】:How deactivate "Transfer-Encoding" in PUT request header如何在 PUT 请求标头中停用“Transfer-Encoding”
【发布时间】:2022-01-07 08:53:45
【问题描述】:

我使用 curl 创建请求,但在标头中,curl 添加了“Transfer-Encoding”选项,但是,想要使用的 API 不知道此选项。我怎样才能删除这个选项?

【问题讨论】:

    标签: c++ libcurl


    【解决方案1】:
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
    
    curl_easy_setopt(curl, CURLOPT_URL, end_point);
    curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
    
    buff = credential_scope;
    buff = ACCESS_KEY + string("/") + buff;
    printf("%s\n",buff.c_str());
    
    
    string test_val = "";
    char tampon[8];
    for (int i = 0; i < SHA256_HASH_SIZE; i++)
    {
        sprintf(tampon,"%02x",signature[i]);
        test_val += tampon;
    }
    
    struct data config;
    config.trace_ascii = 1;
    
    buffUser = (string) "Authorization:"+ ALGORITHM +" Credential="+ ACCESS_KEY + "/" + credential_scope + ",SignedHeaders=" + signed_header + ",Signature=" + test_val;
    chunk = curl_slist_append(chunk,buffUser.c_str());
    
    buffUser = "x-amz-content-sha256:" + payload_hash;
    chunk = curl_slist_append(chunk,buffUser.c_str());
    
    buff = amzdate;
    buffUser = "x-amz-date:" + buff;
    chunk = curl_slist_append(chunk,buffUser.c_str());
    
    
            buffUser = "Content-Length: 1";
            chunk = curl_slist_append(chunk,buffUser.c_str());
    
            buffUser="Connection: keep-alive";
            chunk = curl_slist_append(chunk,buffUser.c_str());
    
            buffUser="Expect: 100-continue";
            chunk = curl_slist_append(chunk,buffUser.c_str());
    
            buffUser="Content-Type: text/plain";
            chunk = curl_slist_append(chunk,buffUser.c_str());
    
    /*buffUser = " Transfer-Encoding:-1";
    chunk = curl_slist_append(chunk,buffUser.c_str());*/
    
    curl_easy_setopt (curl,CURLOPT_HTTP_TRANSFER_DECODING,1);
    
    curl_easy_setopt (curl, CURLOPT_DEBUGFUNCTION , my_trace);
    curl_easy_setopt (curl, CURLOPT_DEBUGDATA , &config);
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
    //curl_easy_setopt(curl,CURLOPT_INFILESIZE,1);
    
    
    
    
    curl_easy_setopt(curl,CURLOPT_HTTPHEADER,chunk);
    
    
    
    curl_easy_setopt(curl,CURLOPT_READDATA,fileOpen);
    curl_easy_setopt(curl,CURLOPT_READFUNCTION,write_data);
    curl_easy_setopt(curl,CURLOPT_INFILE,fileOpen);
    
      res = curl_easy_perform(curl);
    
    
      if(res != CURLE_OK)
        fprintf(stderr, "curl_easy_perform() failed: %s\n",
                curl_easy_strerror(res));
    
      curl_easy_cleanup(curl);
    // }
      fclose (fileOpen);
    printf("Fin programme \n");
    return 0;
    
    

    我的代码和选项 curl_easy_setopt(curl, CURLOPT_PUT, 1);默认情况下,CURL 创建选项“Encoding-Content”。为了修复我的错误,我使用 curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");它没有默认选项并修复我的错误。

    【讨论】:

    • CURLOPT_READDATACURLOPT_INFILE 是相同的选项。如果您不想设置“Transfer-Encoding”标头,请告知 libcurl 文件大小:curl_easy_setopt(curl, CURLOPT_INFILESIZE, uploadsize),则不需要CURLOPT_CUSTOMREQUEST。 “Content-Length: 1”可能会使接收者感到困惑。
    【解决方案2】:

    我用这条线解决了我的问题: curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");

    【讨论】:

    • 很抱歉,如果没有更多解释,这毫无意义。您的问题完全缺乏细节和代码。
    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2019-09-22
    • 2011-11-09
    • 2017-10-03
    • 2020-04-17
    • 2013-10-20
    • 2021-09-05
    • 1970-01-01
    • 2011-07-07
    相关资源
    最近更新 更多