【发布时间】:2021-11-16 01:36:28
【问题描述】:
我尝试通过 PUT-Request 更新产品,但程序在 curl_exec 处停止执行。 因为我什至没有收到错误或任何东西,我有点迷失在黑暗中。 我使用这个站点生成了代码:https://reqbin.com/ 它适用于我的 GET 和 POST 请求,但 PUT 似乎不起作用。 当我使用该站点发送 PUT-Request 时,它确实有效,但不适用于我的本地工作区。
这是我的代码:
public function updateProduct($product) {
$id = $product->{"id"};
$sku = $product->{"sku"};
$infiniteInventory = $product->{"infiniteInventory"};
$images = $product->{"images"};
$category = $product->{"category"};
$adaptivePrice = $product->{"adaptivePrice"};
$manualPrice = $product->{"manualPrice"};
$url = "https://system-url.de/myId/products/".$id;
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_PUT, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$headers = array(
"Authorization: Bearer ".$this->getToken(),
"Content-Type: application/json",
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$obj = [
"sku"=> $sku,
"title"=> [
"de_DE"=> "Claude"
],
"infiniteInventory"=> $infiniteInventory,
"images"=> $images,
"category"=> $category,
"adaptivePrice"=> $adaptivePrice,
"manualPrice"=> $manualPrice
];
$obj = json_encode($obj);
$data = <<<DATA
$obj
DATA;
curl_setopt($curl, CURLOPT_POSTFIELDS, $obj);
//for debug only!
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_getinfo($curl);
$resp = curl_exec($curl);
curl_close($curl);
var_dump($resp);
return;
}
【问题讨论】:
-
使用 curl_error 知道出了什么问题:php.net/manual/en/function.curl-error.php
-
我现在写了这一行,没有显示任何错误,程序仍然挂起: echo curl_error($curl); $resp = curl_exec($curl);回声 curl_error($curl);
-
“curl_errno”呢?如果没有捕获到错误,则响应没有负载。
-
它会停止,直到请求完成,这很明显。如果远程端没有及时响应,您的代码可能看起来“挂起”,但这是一种误解。接收代码是什么?请提供minimal reproducible example!
-
@Ma'moonAl-Akash 我也试过了,但我的代码挂在 exec 上,我在 exec 之前和之后都没有返回错误。