簡體   English   中英

Twitter API 分塊上傳 INIT 身份驗證錯誤(代碼 32)

[英]Twitter API Chunked Upload INIT authentication error (code 32)

我無法將 INIT 帖子發送到https://upload.twitter.com/1.1/media/upload.json進行身份驗證。 它返回“消息”:“無法驗證您”,“代碼”:32

我的圖片簡單上傳工作正常,也可以發布消息,我使用相同的代碼創建授權 header 等。授權 header 如下(使用我的消費者密鑰和授權令牌)

OAuth oauth_consumer_key="[我的消費者密鑰]", oauth_token="[我的授權令牌]", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1671623331", oauth_nonce="NjM4MDcyMjAxMzExODczNDAx", oauth_version="1.0", oauth_signature=" NqC6Fwrz763C8397%2FL67crijtZs%3D"

我嘗試在正文和查詢字符串中傳遞所需的值(命令、total_bytes 和 media_type),並且我也嘗試在生成簽名時包含它們。 我只是看不出問題的原因。

     var baseFormat_pic = "oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}&command={6}&total_bytes={7}&media_type={8}";
     var baseString_pic = string.Format(baseFormat_pic,
                          oauth_consumer_key,
                          oauth_nonce,
                          oauth_signature_method,
                          oauth_timestamp,
                          oauth_token,
                          oauth_version,
                          "INIT",
                          fileBytes.ToString(),
                          HttpUtility.UrlEncode( "video/mp4"));

         baseString_pic = string.Concat("POST&", Uri.EscapeDataString(resource_url_pic),
                                         "&", Uri.EscapeDataString(baseString_pic));
         var compositeKey_pic = string.Concat(Uri.EscapeDataString(oauth_consumer_secret),
                                            "&", Uri.EscapeDataString(oauth_token_secret));

         string oauth_signature_pic;
         using (HMACSHA1 hasher = new HMACSHA1(ASCIIEncoding.ASCII.GetBytes(compositeKey_pic)))
         {
             oauth_signature_pic = Convert.ToBase64String(hasher.ComputeHash(ASCIIEncoding.ASCII.GetBytes(baseString_pic)));
         }

         var headerFormat_pic = "OAuth oauth_consumer_key=\"{3}\", oauth_token=\"{4}\", oauth_signature_method=\"{1}\", oauth_timestamp=\"{2}\", oauth_nonce=\"{0}\", oauth_version=\"{6}\", oauth_signature=\"{5}\"";

         var authHeader_pic = string.Format(headerFormat_pic,
                                            Uri.EscapeDataString(oauth_nonce),
                                            Uri.EscapeDataString(oauth_signature_method),
                                            Uri.EscapeDataString(oauth_timestamp),
                                            Uri.EscapeDataString(oauth_consumer_key),
                                            Uri.EscapeDataString(oauth_token),
                                            Uri.EscapeDataString(oauth_signature_pic),
                                            Uri.EscapeDataString(oauth_version)
                                            );
         ServicePointManager.Expect100Continue = false;
         string reqUrl = resource_url_pic; 
         HttpWebRequest request = (HttpWebRequest)WebRequest.Create(reqUrl);
         request.Method = "POST";
                           
         NameValueCollection nvc = new NameValueCollection();
         nvc.Add("command", "INIT");
         nvc.Add("total_bytes", fileBytes.ToString());
         nvc.Add("media_type", "video/mp4");

         var sb = new StringBuilder();
         foreach (string key in nvc.Keys)
         {
              sb.AppendFormat("{0}={1}&", key, HttpUtility.UrlEncode(nvc[key].ToString()));
         }
         sb.Remove(sb.Length - 1, 1);
                           
         var bytes = Encoding.UTF8.GetBytes(sb.ToString());
         request.ContentLength = bytes.Length;
         request.Headers.Add("Authorization", authHeader_pic);
         request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
         var stream = request.GetRequestStream();
         stream.Write(bytes, 0, bytes.Length);
         stream.Close();
         string result = ReadResult(request);

我錯過了一些非常明顯的東西嗎?

為了解決這個問題,我將編碼的表單 url 更改為多部分表單數據。 這允許 INIT 命令正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM