2016-04-18 6 views
1

私はちょうど追加ステップを行う方法について私の心を包むことはできません。私はすでに問題なくINITパートをやったことがありますが、私は次のステップを行う方法を理解していません。Twitterのアップロード/メディア追加

oauthパラメータと署名ベースのみを使用して承認ヘッダーを作成した後、必要なパラメータをbody要求に追加します。コマンド= APPEND、INITメソッドのmedia_id、未処理のバイナリイメージ、segment_index = 0の場合、イメージのサイズは30 kBを超えないため、1回のリクエストのみを送信する必要があります。

私は次のことを試してみました:

 Dim oHttpWebRequest As HttpWebRequest 
     Dim oHttpWebResponse As HttpWebResponse 
     Dim oStream As Stream 
     Dim newLine As String = System.Environment.NewLine 
     Dim mediaId = getINITresponse() 
     Try 
      oHttpWebRequest = DirectCast(WebRequest.Create("https://upload.twitter.com/1.1/media/upload.json"), HttpWebRequest) 

      Dim sBody As String = buildHeader(twitter, sAuth) 
      oHttpWebRequest.Headers.Add("Authorization", sBody) 
      oHttpWebRequest.Method = "POST" 

      Dim sBoundary As String = DateTime.Now.Ticks.ToString("x") 
      Dim sStartBoundary As String = "--" + sBoundary + newLine 
      Dim sEndBoundary As String = newLine + "--" + sBoundary + "--" + newLine 

      oHttpWebRequest.ContentType = "multipart/form-data; boundary=" + sBoundary 

      Dim sBodyData As String = "" 
      Dim srequestString As New StringBuilder() 
      sBodyData = "command=APPEND&media_id=" + mediaId + "&segment_index=0&media=" 
      srequestString.AppendLine(sStartBoundary + "Content-Disposition: form-data; name=""media""; filename=""image.jpg""" + newLine) 
      srequestString.AppendLine(Encoding.Default.GetString(getBinaryFileFromPath(sFicName))) 
      srequestString.AppendLine(newLine + sEndBoundary + newLine) 

      Dim postData As Byte() 
      postData = Text.Encoding.UTF8.GetBytes(sBodyData) 
      Dim postDataBytes As Byte() 
      postDataBytes = Text.Encoding.UTF8.GetBytes(srequestString.ToString()) 
      Dim byteResult() As Byte = postData.Concat(postDataBytes).ToArray() 

      oHttpWebRequest.ContentLength = byteResult.Length 
      Using requestStream = oHttpWebRequest.GetRequestStream() 
       requestStream.Write(byteResult, 0, byteResult.Length) 
       requestStream.Close() 
      End Using 

      oHttpWebResponse = DirectCast(oHttpWebRequest.GetResponse(), HttpWebResponse) 
      oStream = oHttpWebResponse.GetResponseStream() 

      Return New StreamReader(oStream, Encoding.UTF8).ReadToEnd() 

     Catch wex As WebException 'Exception venant du serveur distant 
      Return New StreamReader(wex.Response.GetResponseStream()).ReadToEnd() 
     End Try 

私の初期の部分が働いていると私はmedia_idこのを保存し、追加部分のためにそれを使用。私のイメージは30kBを超えないので、サイズの問題ではありません。

私は状態:400 Bad Requestで私に反応します。

私は何が間違っているのか分かりません。私の悪い英語のために申し訳ありません!

答えて

1

私は答えを見つける:

sBodyData = "command=APPEND&media_id=" + mediaId + "&segment_index=0&media=" 

私はContentTypeを=アプリケーション/ x-www-form-urlencodedでとリクエストを送っていたかのように私は私の体のデータを作っていました。 同じリクエストでcontentTypeの両方を使用しましたが、もちろん動作しませんでした。今のように見える:

Dim newLine As String = System.Environment.NewLine 

srequestString.AppendLine(sStartBoundary + "Content-Disposition: form-data; name=""command""" + newLine) 
srequestString.AppendLine("APPEND") 
srequestString.AppendLine(sStartBoundary + "Content-Disposition: form-data; name=""media_id""" + newLine) 
srequestString.AppendLine(mediaId) 
srequestString.AppendLine(sStartBoundary + "Content-Disposition: form-data; name=""media""" + newLine) 
srequestString.AppendLine(Encoding.Default.GetString(getBinaryFileFromPath(sFileName))) 
srequestString.AppendLine(sStartBoundary + "Content-Disposition: form-data; name=""segment_index""" + newLine) 
srequestString.AppendLine("0") 
srequestString.AppendLine(sEndBoundary) 
関連する問題