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

使用RestSharp调用Instagram私有API上传视频遇内部服务器错误求助

Instagram私有API视频上传Post请求内部服务器错误问题

已通过Graph API实现Instagram视频上传,作为技术挑战尝试私有API时卡壳一周:Options和Get请求均执行成功,但最终的Post上传请求返回内部服务器错误。抓包确认请求体应为二进制视频数据,但当前构造方式有误,具体代码及问题如下:

成功的Options请求

var tstamp = Bridge.UnixMs;
var request = new RestRequest($"/rupload_igvideo/fb_uploader_{tstamp}", Method.Options);
request.AddHeader("Host", "i.instagram.com");
request.AddHeader("Connection", "keep-alive");
request.AddHeader("Accept", "*/*");
request.AddHeader("Access-Control-Request-Method", "GET");
request.AddHeader("Access-Control-Request-Headers", "x-asbd-id,x-ig-app-id");
request.AddHeader("Origin", "https://www.instagram.com");
request.AddHeader("Sec-Fetch-Mode", "cors");
request.AddHeader("Sec-Fetch-Site", "same-site");
request.AddHeader("Sec-Fetch-Dest", "empty");
request.AddHeader("Referer", "https://www.instagram.com/");
request.AddHeader("Accept-Encoding", "gzip, deflate, br");
request.AddHeader("Accept-Language", "en-US,en;q=0.9,fr;q=0.8");
request.AddHeader("X-CSRFToken", Data.jar!["csrftoken"]);
request.AddHeader("X-IG-App-ID", Data.appId!);
request.AddHeader("X-IG-WWW-Claim", Data.hmac!);
request.AddHeader("X-Instagram-AJAX", Data.ajax!);
request.AddHeader("Cookie", $"{Data.csrf} {Data.datr} {Data.ds} {Data.did}" +
    $"{Data.nrcb} {Data.ses} {Data.bid} {Data.bts} {Data.mid!.Replace(";", "")}");
var body = @"";
request.AddParameter("text/plain", body, ParameterType.RequestBody);
var response = await req.Client().ExecuteAsync(request);

成功的Get请求

request = new RestRequest($"/rupload_igvideo/fb_uploader_{tstamp}", Method.Get);
request.AddHeader("Host", "i.instagram.com");
request.AddHeader("Accept", "*/*");
request.AddHeader("sec-ch-ua-mobile", "?0");
request.AddHeader("sec-ch-ua-platform", "\"Windows\"");
request.AddHeader("Origin", "https://www.instagram.com");
request.AddHeader("Sec-Fetch-Site", "same-site");
request.AddHeader("Sec-Fetch-Mode", "cors");
request.AddHeader("Sec-Fetch-Dest", "empty");
request.AddHeader("Referer", "https://www.instagram.com/");
request.AddHeader("Accept-Encoding", "gzip, deflate, br");
request.AddHeader("Accept-Language", "en-US,en;q=0.9,fr;q=0.8");
request.AddHeader("Cookie", $"{Data.csrf} {Data.datr} {Data.ds} {Data.did}" +
                $"{Data.nrcb} {Data.ses} {Data.bid} {Data.bts} {Data.mid!.Replace(";", "")}"); 
response = await req.Client().ExecuteAsync(request);

报错的Post请求

byte[] vBytes = Encoding.UTF8.GetBytes(@"C:\Users\x\OneDrive\Bureau\nurf.mp4");

body = $@"{vBytes}";
string size = body.Length.ToString();
request = new RestRequest($"/rupload_igvideo/fb_uploader_{tstamp}", Method.Post);
request.AddHeader("Host", "i.instagram.com");
request.AddHeader("Connection", "keep-alive");
request.AddHeader("Content-Length", $"{size}");
request.AddHeader("sec-ch-ua", "\"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"114\", \"Google Chrome\";v=\"114\"");
request.AddHeader("X-Entity-Name", $"fb_uploader_{tstamp}");
request.AddHeader("Offset", "0");
request.AddHeader("sec-ch-ua-mobile", "?0");
request.AddHeader("X-Instagram-AJAX", Data.ajax!);
request.AddHeader("Accept", "*/*");
request.AddHeader("X-Instagram-Rupload-Params", @$"{{""client-passthrough"":""1"",
                                                        ""is_clips_video"":""1"",
                                                        ""is_sidecar"":""0"",
                                                        ""media_type"":2,
                                                        ""for_album"":false,
                                                        ""video_format"":"""",
                                                        ""upload_id"":""{tstamp}"",
                                                        ""upload_media_duration_ms"":30700,
                                                        ""upload_media_height"":427,
                                                        ""upload_media_width"":240,
                                                        ""video_transform"":null,
                                                        ""video_edit_params"":{{""crop_height"":240,
                                                        ""crop_width"":240,""crop_x1"":0,
                                                        ""crop_y1"":93,
                                                        ""mute"":false,
                                                        ""trim_end"":30.7,
                                                        ""trim_start"":0}}}}"); ;
request.AddHeader("X-Entity-Length", $"{size}");
request.AddHeader("sec-ch-ua-platform", "\"Windows\"");
request.AddHeader("Origin", "https://www.instagram.com");
request.AddHeader("Sec-Fetch-Site", "same-site");
request.AddHeader("Sec-Fetch-Mode", "cors");
request.AddHeader("Sec-Fetch-Dest", "empty");
request.AddHeader("Referer", "https://www.instagram.com/");
request.AddHeader("Accept-Encoding", "gzip, deflate, br");
request.AddHeader("Accept-Language", "en-US,en;q=0.9,fr;q=0.8");
request.AddHeader("Cookie", $"{Data.csrf} {Data.datr} {Data.ds} {Data.did}" +
                                $"{Data.nrcb} {Data.ses} {Data.bid} {Data.bts} {Data.mid!.Replace(";", "")}"); 
request.AddHeader("Content-Type", "text/plain");            
request.AddParameter("text/plain", body, ParameterType.RequestBody);
response = await req.Client().ExecuteAsync(request);

问题分析与修正方案

当前Post请求存在三个核心错误:

  • 视频文件读取错误:Encoding.UTF8.GetBytes(@"C:\Users\x\OneDrive\Bureau\nurf.mp4")是将文件路径转成字节数组,而非读取视频文件的二进制内容,应替换为File.ReadAllBytes(@"C:\Users\x\OneDrive\Bureau\nurf.mp4")。
  • 请求体与长度计算错误:将字节数组转成字符串后计算长度,完全偏离了真实的视频文件大小,应直接使用字节数组的长度作为Content-Length和X-Entity-Length的值。
  • Content-Type错误:上传二进制视频应使用video/mp4或application/octet-stream,而非text/plain,否则服务器无法识别请求体类型。

修正后的Post请求代码:

// 正确读取视频文件的二进制内容
byte[] vBytes = File.ReadAllBytes(@"C:\Users\x\OneDrive\Bureau\nurf.mp4");
string fileSize = vBytes.Length.ToString();

request = new RestRequest($"/rupload_igvideo/fb_uploader_{tstamp}", Method.Post);
request.AddHeader("Host", "i.instagram.com");
request.AddHeader("Connection", "keep-alive");
request.AddHeader("Content-Length", fileSize);
request.AddHeader("sec-ch-ua", "\"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"114\", \"Google Chrome\";v=\"114\"");
request.AddHeader("X-Entity-Name", $"fb_uploader_{tstamp}");
request.AddHeader("Offset", "0");
request.AddHeader("sec-ch-ua-mobile", "?0");
request.AddHeader("X-Instagram-AJAX", Data.ajax!);
request.AddHeader("Accept", "*/*");
request.AddHeader("X-Instagram-Rupload-Params", @$"{{""client-passthrough"":""1"",
                                                        ""is_clips_video"":""1"",
                                                        ""is_sidecar"":""0"",
                                                        ""media_type"":2,
                                                        ""for_album"":false,
                                                        ""video_format"":"""",
                                                        ""upload_id"":""{tstamp}"",
                                                        ""upload_media_duration_ms"":30700,
                                                        ""upload_media_height"":427,
                                                        ""upload_media_width"":240,
                                                        ""video_transform"":null,
                                                        ""video_edit_params"":{{""crop_height"":240,
                                                        ""crop_width"":240,""crop_x1"":0,
                                                        ""crop_y1"":93,
                                                        ""mute"":false,
                                                        ""trim_end"":30.7,
                                                        ""trim_start"":0}}}}");
request.AddHeader("X-Entity-Length", fileSize);
request.AddHeader("sec-ch-ua-platform", "\"Windows\"");
request.AddHeader("Origin", "https://www.instagram.com");
request.AddHeader("Sec-Fetch-Site", "same-site");
request.AddHeader("Sec-Fetch-Mode", "cors");
request.AddHeader("Sec-Fetch-Dest", "empty");
request.AddHeader("Referer", "https://www.instagram.com/");
request.AddHeader("Accept-Encoding", "gzip, deflate, br");
request.AddHeader("Accept-Language", "en-US,en;q=0.9,fr;q=0.8");
request.AddHeader("Cookie", $"{Data.csrf} {Data.datr} {Data.ds} {Data.did}" +
                                $"{Data.nrcb} {Data.ses} {Data.bid} {Data.bts} {Data.mid!.Replace(";", "")}"); 
// 修正Content-Type为视频类型
request.AddHeader("Content-Type", "video/mp4");            
// 直接添加二进制字节数组作为请求体
request.AddParameter("video/mp4", vBytes, ParameterType.RequestBody);
response = await req.Client().ExecuteAsync(request);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:07:36