【问题标题】:Curl CURLOPT_UPLOAD AND CURLOPT_FOLLOWLOCATION not working together (libcurl)卷曲 CURLOPT_UPLOAD 和 CURLOPT_FOLLOWLOCATION 不能一起工作(libcurl)
【发布时间】:2023-03-29 18:15:01
【问题描述】:

我在网上搜索但找不到这个问题的答案。因此在这里发布。

在我的代码中,我使用 CURLOPT_UPLOAD 设置为 true(PUT 请求)并将 CURLOPT_READFUNCTION 和 CURLOPT_READDATA 和 CURLOPT_INFILESIZE_LARGE 设置为适合发送流的方式将二进制流上传到服务器。

最近更改了端点 url,导致 301 永久移动错误。我不想更改代码以读取 301 并适当地重定向,因为这似乎违反直觉。

看到 CURLOPT_FOLLOWLOCATION 通知 curl 自动重定向。但它没有按预期重定向。我在谷歌搜索时看到了对 POST + FOLLOWLOCATION 的引用,但没有看到 PUT + FOLLOWLOCATION。

所以我的问题是。 FOLLOWLOCATION 是否应该与 libcurl 中的 PUT 一起正常工作? 另外,如果没有,您能告诉我有哪些替代方法可以允许自动重定向吗?

【问题讨论】:

  • 您是否尝试将 curl_setopt($curl, CURLOPT_PUT, true) 替换为 curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT") 保留 FOLLOWLOCATION,就像使用 POST 一样?
  • 会试试看。
  • 我没有使用 CURLOPT_PUT。取而代之的是依靠 CURLOPT_UPLOAD 来放置二进制流,在重定向之前它工作正常。无论如何,我添加了这两个。但仍然没有自动重定向。仍然只看到 301 响应作为 curl 调试中的最终响应代码。 => curl_easy_setopt(CurlHandle,CURLOPT_CUSTOMREQUEST,“PUT”);和 curl_easy_setopt(CurlHandle, CURLOPT_FOLLOWLOCATION, 1);
  • 我必须直接使用建议的新网址。看起来重定向不适用于上传。

标签: curl libcurl


【解决方案1】:

我在这里遇到了同样的问题,但我注意到我的文件只有在我尝试发送多维数组并将有效负载放入 http_build_query 函数时才会失败。 解决方案:我将所有有效负载编码为一个字符串,并将我的文件与其他有效负载并排放置。所以我删除了函数 http_build_query 并发送了我的数据数组。 有效!

当您同时放置一个多维数组 + 文件 + http_build_query 时,PHP 似乎没有发送文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-25
    • 2023-03-19
    • 1970-01-01
    • 2013-02-05
    • 2012-04-08
    • 2018-06-07
    • 2018-06-05
    • 2019-08-11
    相关资源
    最近更新 更多