You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TwitterOAuth上传Twitter视频遇SSL错误、超时,无法传大文件如何解决

Twitter分块上传视频超时/连接重置问题解决方案

问题根因

  • 分块大小超限:当前使用4MB原始数据分块,base64编码后体积膨胀33%,最终大小约为5.3MB,超出官方要求的media_data参数最大5MB的限制,会被服务端主动断开连接,触发Connection reset by peer错误。
  • 超时设置过短:TwitterOAuth默认请求超时为5秒,传输大分块时如果网络带宽不足,很容易触发超时错误。
  • base64编码额外增加体积:使用media_data需要先编码,比直接传二进制多了33%的传输量,进一步提升了超时和超限的概率。

解决方案

1. 调整分块大小

如果继续使用media_data传base64编码内容,将原始分块大小调整到3MB及以下,确保编码后的体积不超过4MB,远低于5MB的限制:

$chunk = fread($handle, 3 * 1024 * 1024); // 调整为3MB原始分块

2. 延长请求超时时间

初始化TwitterOAuth实例时,主动设置更长的连接超时和请求超时:

// 初始化TwitterOAuth后增加以下配置
$this->tw->setTimeouts(10, 30); // 连接超时10秒,请求超时30秒,可根据网络情况进一步调大

3. 改用media参数传原始二进制

按照官方建议优先使用media参数传输原始二进制,省去base64编码步骤,减少传输体积,调整后的append函数示例:

function append($mediaId, $fileUrl)
{
    $segmentIndex = 0;
    $handle = fopen($fileUrl, 'rb'); // 用二进制模式打开文件,避免Windows环境下编码错误
    while (!feof($handle)) 
    {
        $chunk = fread($handle, 4 * 1024 * 1024); // 用原始二进制的话可以用到5MB的上限,分块可以设到4MB
        // 生成分块临时文件
        $tempFile = tmpfile();
        fwrite($tempFile, $chunk);
        fseek($tempFile, 0);
        $meta = stream_get_meta_data($tempFile);
        $tempPath = $meta['uri'];
        
        $params = [
            'command' => 'APPEND', 
            'media_id' => $mediaId, 
            'media' => $tempPath, 
            'segment_index' => $segmentIndex
        ];
        $this->tw->uploadCustom('media/upload', $params);
        
        fclose($tempFile);
        $segmentIndex++;
    }
    fclose($handle);
}

4. 增加请求重试机制

对APPEND请求增加重试逻辑,应对偶发的网络波动和服务端限流:

// 单个请求的重试示例,放在APPEND调用的位置
$retryTimes = 0;
$maxRetry = 3;
while ($retryTimes < $maxRetry) {
    try {
        $this->tw->uploadCustom('media/upload', $params);
        break;
    } catch (Exception $e) {
        $retryTimes++;
        if ($retryTimes >= $maxRetry) {
            throw $e;
        }
        sleep(1); // 等待1秒后重试
    }
}

内容的提问来源于stack exchange,提问作者Linesofcode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 16:36:05