vb.net - 闭包编译器服务 API

标签 vb.net http post google-closure-compiler

尝试将闭包编译器服务集成到我的一个应用程序中,但遇到了一些问题。

返回的错误是“(413) 请求实体太大。”听起来很合理,但我确实知道该服务接受的文件比我发送的文件大。

    Private _HttpWebRequest As HttpWebRequest
Private _Result As StringBuilder
Private Const ClosureWebServiceURL As String = "http://closure-compiler.appspot.com/compile?output_format=xml&output_info=compiled_code" &
                                                                    "&output_info=warnings" &
                                                                    "&output_info=errors" &
                                                                    "&output_info=statistics" &
                                                                    "&compilation_level=ADVANCED_OPTIMIZATIONS" &
                                                                    "&warning_level=default" &
                                                                    "&js_code={0}"





_Result = New StringBuilder
_HttpWebRequest = DirectCast(WebRequest.Create(String.Format(ClosureWebServiceURL, HttpUtility.UrlEncode(_Script))), HttpWebRequest)
_HttpWebRequest.Method = "POST"
_HttpWebRequest.ContentType = "application/x-www-form-urlencoded"
_HttpWebRequest.ContentLength = 0

Dim response As WebResponse = _HttpWebRequest.GetResponse()

Using responseStream As Stream = response.GetResponseStream
     Dim encoding As Encoding = System.Text.Encoding.GetEncoding("utf-8")
     Using readStream As New StreamReader(responseStream, encoding)
          Dim read(256) As Char
          Dim count As Integer = readStream.Read(read, 0, 256)
          While count > 0
              Dim str As New String(read, 0, count)
              _Result.Append(str)
              count = readStream.Read(read, 0, 256)
          End While
     End Using
End Using

有什么想法吗?

最佳答案

将您的请求数据移至 POST 的 RequestStream 而不是使用查询字符串。

Private _HttpWebRequest As HttpWebRequest
Private _Result As StringBuilder
Private Const ClosureWebServiceURL As String = "http://closure-compiler.appspot.com/compile?"
Private Const ClosureWebServicePOSTData As String = "output_format=xml&output_info=compiled_code" &
                                                                "&output_info=warnings" &
                                                                "&output_info=errors" &
                                                                "&output_info=statistics" &
                                                                "&compilation_level=ADVANCED_OPTIMIZATIONS" &
                                                                "&warning_level=default" &
                                                                "&js_code={0}"


    '//Build's a large javascript for testing
    Dim _Script As String = ""
    For I = 1 To 100
        _Script &= "function hello_" & I & "(name) {  alert('Hello, ' + name);}hello('New user');"
    Next

    '//Create the POST data
    Dim Data = String.Format(ClosureWebServicePOSTData, HttpUtility.UrlEncode(_Script))

    _Result = New StringBuilder
    _HttpWebRequest = DirectCast(WebRequest.Create(ClosureWebServiceURL), HttpWebRequest)
    _HttpWebRequest.Method = "POST"
    _HttpWebRequest.ContentType = "application/x-www-form-urlencoded"
    '//Set the content length to the length of the data. This might need to change if you're using characters that take more than 256 bytes
    _HttpWebRequest.ContentLength = Data.Length
    '//Write the request stream
    Using SW As New StreamWriter(_HttpWebRequest.GetRequestStream())
        SW.Write(Data)
    End Using


    Dim response As WebResponse = _HttpWebRequest.GetResponse()

    Using responseStream As Stream = response.GetResponseStream
        Dim encoding As Encoding = System.Text.Encoding.GetEncoding("utf-8")
        Using readStream As New StreamReader(responseStream, encoding)
            Dim read(256) As Char
            Dim count As Integer = readStream.Read(read, 0, 256)
            While count > 0
                Dim str As New String(read, 0, count)
                _Result.Append(str)
                count = readStream.Read(read, 0, 256)
            End While
        End Using
    End Using


    Trace.WriteLine(_Result)

关于vb.net - 闭包编译器服务 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4759154/

相关文章:

vb.net - 我对 log4net 缺少什么 - 没有创建日志文件

vb.net - 数组或列表中的项目是否保持其顺序?

c# - 请求了错误的脚本 url

http - 在tcl 8.0中使用http post方法获取url

android - 无法写入请求 : no suitable HttpMessageConverter found for request type [org. json.JSONObject] 和内容类型 [application/json]

vb.net - 函数调用仅在包含 MessageBox.Show() 时才有效?

asp.net - 删除字符串中的双换行符

http - 实际web开发中http协议(protocol)还剩下什么?

java - 泽西客户端 : Cache-Manager for Conditional GET?

javascript - 使用ajax将数据发布到django时获取空值