PHP CURL调用SwiftDil API遇413 Request Entity Too Large错误排查
解决413 Request Entity Too Large 问题的排查步骤
首先得指出你代码里的一个明显bug——这个错误可能会间接加剧请求体过大的问题:
你在back_side字段里错误引用了$_FILES['front_side']['name'],这会导致你把同一张正面图片重复上传两次,总请求体大小直接翻倍,更容易触发413错误。先把这个修正过来:
$fields = array( 'front_side' => curl_file_create('temp/' . $_FILES['front_side']['name']), // 这里要改成back_side对应的文件名! 'back_side' => curl_file_create('temp/' . $_FILES['back_side']['name']), 'type' => $document_type, 'document_number' => $document_number, 'issuing_country' => $issuing_country );
接下来针对413错误,我们从几个核心方向排查:
1. 确认SwiftDil API的大小限制
因为500KB以内的文件能正常发送,超过就报错,最可能的原因是SwiftDil API本身设置了请求体或单文件的大小上限。你需要:
- 查阅SwiftDil的官方文档,找到他们明确标注的最大文件/请求体尺寸;
- 如果文档里没有说明,直接联系他们的技术支持确认这个限制值。
2. 检查你方服务器的对外请求限制
虽然你已经把大文件成功存到了自己的服务器,但你的服务器在通过CURL向外部API发送请求时,可能存在额外的大小限制:
- 如果用Nginx作为反向代理,检查
nginx.conf或站点配置里的client_max_body_size、proxy_max_temp_file_size参数,确认它们的值足够容纳你的请求体; - 如果是Apache服务器,检查
httpd.conf里的LimitRequestBody指令,确保没有限制请求体的最大大小; - 另外可以顺带确认PHP的
post_max_size值(不过你已经能接收大文件到服务器,这个大概率不是问题)。
3. 优化文件大小或采用分块上传
如果确认是API的大小限制导致的,你可以尝试这些解决方案:
- 在上传到API之前,用PHP的GD库或Imagick对图片进行压缩(比如降低分辨率、调整画质),把文件控制在API允许的范围内;
- 如果SwiftDil API支持分块上传,可以把大文件拆分成小块分批发送(具体实现需要参考他们的API文档)。
内容的提问来源于stack exchange,提问作者Wouter den Ouden
相关产品推荐
相关产品推荐

