【问题标题】:Twitter upload/media AppendTwitter上传/媒体附加
【发布时间】:2016-04-18 20:45:43
【问题描述】:

我只是想不通如何执行附加步骤。我已经顺利完成了初始化部分,但我不明白下一步该怎么做。

我现在在做什么:我构建了一个只有 oauth 参数和签名库的授权标头,然后我将所需的参数放入正文请求中:command=APPEND,来自 INIT 方法的 media_id,带有原始二进制图像,segment_index=0,因为我只需要发送一个请求,因为我的图像大小永远不会超过 30 kB。

我尝试了以下方法:

        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

我的 Init 部分正在工作,我保存了 media_id 并将其用于 Append 部分。我的图片不超过 30 kB,所以不是大小问题。

Twitter 用状态回复我:400 Bad Request。

我不知道我做错了什么。对不起我的英语不好!

【问题讨论】:

    标签: vb.net twitter httpwebrequest


    【解决方案1】:

    我找到了答案:

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

    我正在制作我的正文数据,就好像我正在发送 ContentType=application/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)
    

    【讨论】:

      猜你喜欢
      • 2015-03-06
      • 2019-09-25
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 2021-07-22
      • 2018-10-20
      • 2015-06-15
      相关资源
      最近更新 更多