首页 > 解决方案 > 删除调用 curl 返回 400

问题描述

我正在调试为什么每次从 Laravel 服务器收到 400 响应。

当我使用 Postman 调用时,一切正常,但是当我从 curl 脚本调用时,它每次都返回 400。

我的 curl 代码如下所示:

        $endpoint = "http://sup.l/api/iasku/IA00000001-My Beat-29999-H?";
        $additional_headers = "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9zdXAubG9jYWxcL2FwaVwvbG9naW4iLCJpYXQiOjE2MDE2MjI2MDQsImV4cCI6MTYwMTcwOTAwNCwibmJmIjoxNjAxNjIyNjA0LCJqdGkiOiJITFAyUEhWeEdQU1J0NWFQIiwic3ViIjoxLCJwcnYiOiI4N2UwYWYxZWY5ZmQxNTgxMmZkZWM5NzE1M2ExNGUwYjA0NzU0NmFhIn0.3t15l573A_EHotUq6Ud3fcGegXZh1tGsMf3i9BlrVWU";

        $headers = array_merge([
            'Content-Type: application/json',
            'Accept: application/json',
        ], $additional_headers );
        
        $options = [
            CURLOPT_URL            => $endpoint,
            CURLOPT_CUSTOMREQUEST  => 'DELETE',
            CURLOPT_RETURNTRANSFER => 1,     // return web page
            CURLOPT_HEADER         => 0,    // don't return headers
            CURLOPT_FOLLOWLOCATION => 1,     // follow redirects
            CURLOPT_ENCODING       => "",       // handle all encodings
            CURLOPT_USERAGENT      => "myuser.agent", // who am i
            CURLOPT_AUTOREFERER    => 1,     // set referer on redirect
            CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect
            CURLOPT_TIMEOUT        => 120,      // timeout on response
            CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
            CURLOPT_SSL_VERIFYPEER => 0,     // Disabled SSL Cert checks,
            CURLOPT_SSL_VERIFYHOST => 0,
            CURLOPT_HTTPHEADER     => $headers,
        ];

        if (count($body)) {
            $options['CURLOPT_POSTFIELDS'] = json_encode($body);
        }

        $ch = curl_init(); 
        curl_setopt_array( $ch, $options );

        $content = curl_exec( $ch );

我的 curl 命令看起来像这样(工作正常):

curl --request DELETE \
  --url http://sup.l/api/iasku/IA00000001-My%20Beat-29999-H? \
  --header 'authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9zdXAubG9jYWxcL2FwaVwvbG9naW4iLCJpYXQiOjE2MDE2MjI2MDQsImV4cCI6MTYwMTcwOTAwNCwibmJmIjoxNjAxNjIyNjA0LCJqdGkiOiJITFAyUEhWeEdQU1J0NWFQIiwic3ViIjoxLCJwcnYiOiI4N2UwYWYxZWY5ZmQxNTgxMmZkZWM5NzE1M2ExNGUwYjA0NzU0NmFhIn0.3t15l573A_EHotUq6Ud3fcGegXZh1tGsMf3i9BlrVWU'

谁能看到这里有什么问题?我应该如何调试这个?

标签: phpcurl

解决方案


这里的问题是我的 URL 有空格,所以服务器无法处理它。

一旦我添加rawurlencode了这部分 URL IA00000001-My Beat-29999-H?,它就开始按预期工作。


推荐阅读