gpt4 book ai didi

PHP Curl - 以下位置带有 "201 Created"响应头

转载 作者:行者123 更新时间:2023-12-04 12:12:10 25 4
gpt4 key购买 nike

我正在向 API 提交 CURL Post 请求,该请求在成功时返回状态“201 Created”,其中包含 LOCATION 中资源的 URL。标题的一部分。我想要的是自动检索新创建的资源,但到目前为止还不能这样做。我试过设置 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);但无济于事。值得注意的是,该资源确实需要 GET要求。

我不确定是状态码是 201,还是请求方法需要从 POST 改变至 GET ,但由于某种原因它没有遵循 LOCATION标题。正在获取 curl_getinfo($ch,CURLINFO_EFFECTIVE_URL);似乎确认了这一点,因为结果与原始 URL 相同,而不是新的 LOCATION .

作为最后的手段,我考虑过简单地解析 header 并创建一个新的 CURL 请求,但这不是最佳选择,我猜我只是缺少一些简单的东西来使这项工作按需要进行。

如何让 CURL 自动关注并提交 GET请求到 LOCATION返回 201 响应?

最佳答案

你不能。

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl 按照响应 LOCATION仅适用于 3xx状态码。

AFAIK 并声明为文档,无法强制 curl 使用 201 响应跟随位置。

您必须解析 header ,获取 LOCATION,然后发出第二个 curl 请求。

关注状态不同于 3xx 的位置将是一个异常。同样来自 curl 命令行工具和 C 库 documentation :-L, --location -- (HTTP) If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response code), this option will make curl redo the request on the new place
快速查看您在 /lib/http.c 上找到的 curl 源代码函数Curl_http_readwrite_headers .

位置跟随在内部使用此条件处理:

else if((k->httpcode >= 300 && k->httpcode < 400) &&
checkprefix("Location:", k->p) &&
!data->req.location) {
/* this is the URL that the server advises us to use instead */
char *location = Curl_copy_header_value(k->p);
if(!location)
return CURLE_OUT_OF_MEMORY;
if(!*location)
/* ignore empty data */
free(location);
else {
data->req.location = location;

if(data->set.http_follow_location) {
DEBUGASSERT(!data->req.newurl);
data->req.newurl = strdup(data->req.location); /* clone */
if(!data->req.newurl)
return CURLE_OUT_OF_MEMORY;

/* some cases of POST and PUT etc needs to rewind the data
stream at this point */
result = http_perhapsrewind(conn);
if(result)
return result;
}
}
}

该位置后跟一个状态代码,介于 300 之间和 399

关于PHP Curl - 以下位置带有 "201 Created"响应头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42817497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com