【发布时间】: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);
-
我必须直接使用建议的新网址。看起来重定向不适用于上传。