为什么通过 API 使用基本 AUTH 的 CURL PUT 请求不发送 JSON 数据?

Why the CURL PUT request with basic AUTH via API doesn't send JSON data?

提问人:newert 提问时间:11/13/2023 最后编辑:Brian Tompsett - 汤莱恩newert 更新时间:11/14/2023 访问量:52

问:

通过 API 使用基本 AUTH 发出 PHP CURL PUT JSON 请求

$data = <<<JSON
  {
    "name": "John",
    "age": "32",
    "address": {
                 "city": "London",
                 "street": "Laxin street 32",
                 "zip": "32567"
               }    
   } JSON;

这是我所拥有的:

$data_json = json_encode($data);
$url = "https://www.website.com/record?apiKey={API_KEY}";
$username = "user";
$password = "123abcd"; 
$encodedAuth = base64_encode($username.":".$password);
$curl = curl_init();
        curl_setopt_array($curl, [CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "PUT",
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_HTTPHEADER => array("Authentication : Basic ".$encodedAuth),
        CURLOPT_USERPWD => $username.":".$password,
        CURLOPT_HTTPAUTH => CURLAUTH_ANY,
        CURLOPT_POSTFIELDS => $data_json,
        CURLOPT_HTTPHEADER => [
        "Cache-Control: no-cache",
        "Content-Type: application/json",
        "TOKEN: SAMPLE_TOKEN"],]);
        $response = curl_exec($curl);    
        curl_close($curl);

作为回应,我获得了原始记录数据,而没有通过 API 发送的更改。

如何使用带有基本身份验证的 PHP 的 curl 请求 PUT?我尝试了一些类似问题的答案,但没有成功。

php json curl

评论

0赞 Kolyunya 11/13/2023
实际的 API 主机名是什么?什么是响应状态码?
1赞 Adi 11/13/2023
快速提问:为什么你有 2 个?一个是覆盖另一个。还有为什么像你这样发布的 JSON,为什么不是一个 php 数组,然后它,他们定义 JSON 的方式一定有问题。另外,如果您要设置身份验证标头,那么为什么和?CURLOPT_HTTPHEADERjson_encodeCURLOPT_USERPWD CURLOPT_HTTPAUTH
0赞 newert 11/13/2023
嗨,阿迪,您能否提供一个示例“为什么像您发布的那样使用 JSON,为什么不是 php 数组然后json_encode它,您定义 JSON 的方式一定有问题”?
0赞 newert 11/14/2023
好的,阿迪,我发送了 JSON,因为我已经有了 JSON,只需要添加额外的数据。
0赞 newert 11/14/2023
你是对的,我得到了反斜杠: “\”{\\r\\n \\\“name\\\”: \\\“John\\\”,\\r\\n \\\“age\\\”: \\\“32\\\”,\\r\\n \\\“address\\\”: {\\r\\n \\\“city\\\”: \\\“London\\\”,\\r\\n \\\“street\\\”: \\\“Laxin street 32\\\”,\\r\\n \\\“zip\\\”: \\\“32567\\\”\\r\\n } \\r\\n } \“”

答: 暂无答案