2011-01-21 6 views
1

클로저 컴파일러 서비스를 내 응용 프로그램 중 하나에 통합하려고하고 몇 가지 문제가 있습니다.클로저 컴파일러 서비스 API

"(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 

아이디어가 있으십니까?

답변

2

쿼리 문자열을 사용하지 말고 요청 데이터를 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) 
+0

Legand! 고마워요. 그 일을해야만 했어. 그렇게 늦게 일하는 것을 멈춰야합니다. :-) –