如何将Cloudflare Stream的CURL命令转为Laravel的Guzzle HTTP代码?
将Cloudflare Stream视频上传的CURL命令转换为Laravel Guzzle代码
原CURL命令解析
原命令通过Cloudflare邮箱+API Key认证,以multipart/form-data格式上传本地视频,表单字段名为file:
curl -X POST "https://api.cloudflare.com/client/v4/accounts/023e105f4ecef8ad9ca31a8372d0c353/stream" \ -H "X-Auth-Email: user@example.com" \ -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \ --form 'file=@/Users/kyle/Desktop/skiing.mp4'
你的Guzzle代码存在的问题
- 认证方式错误:原CURL用的是Cloudflare专属的邮箱+API Key认证,而非Bearer Token;
- Content-Type头错误:手动设置
application/json会导致multipart文件上传失败,Guzzle会自动处理该请求的头部; - 表单字段配置错误:重复设置
name键(语法无效)、字段名应为file而非upload、文件名设置不合理; - 配置项拼写错误:
acountId应为accountId。
修正后的Guzzle代码
假设$file是Laravel的Illuminate\Http\UploadedFile实例:
$authEmail = config('services.cloudflare.email'); $authKey = config('services.cloudflare.key'); $accountId = config('services.cloudflare.accountId'); $client = new \GuzzleHttp\Client(); try { $response = $client->request('POST', "https://api.cloudflare.com/client/v4/accounts/{$accountId}/stream", [ 'headers' => [ 'X-Auth-Email' => $authEmail, 'X-Auth-Key' => $authKey, ], 'multipart' => [ [ 'name' => 'file', 'filename' => $file->getClientOriginalName(), 'contents' => fopen($file->getRealPath(), 'r'), ], ], ]); // 解析并输出响应 $result = json_decode($response->getBody(), true); dd($result); } catch (\GuzzleHttp\Exception\RequestException $e) { // 捕获错误便于调试 dd($e->getResponse()->getBody()->getContents()); }
关键修正说明
- 替换为Cloudflare要求的认证头,确保配置文件中对应字段正确;
- 移除错误的
Content-Type设置,让Guzzle自动处理multipart请求头部; - 统一表单字段名为
file,使用用户上传的原始文件名,以只读模式打开文件资源; - 添加异常捕获,方便排查上传过程中的问题;
- 修正配置项拼写错误。
内容的提问来源于stack exchange,提问作者Mehmet Küçükçelebi
相关产品推荐
相关产品推荐

