2013-05-30 50 views
0

我正在尝试在Java中复制以下C#代码。这段代码是一个辅助类,它发送一个包含xml的请求,并读取响应。使用Apache HttpComponents发送xml

internal static String Send(String url, String body) 
    { 
     HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); 
     try 
     { 
      // create the new httpwebrequest with the uri 
      request.ContentLength = 0; 
      // set the method to POST 
      request.Method = "POST"; 

      if (!String.IsNullOrEmpty(body)) 
      { 
       request.ContentType = "application/xml; charset=utf-8"; 
       byte[] postData = Encoding.Default.GetBytes(body); 
       request.ContentLength = postData.Length; 
       using (Stream s = request.GetRequestStream()) 
       { 
        s.Write(postData, 0, postData.Length); 
       } 

      } 

      using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
      { 
       String responseString = new StreamReader(response.GetResponseStream()).ReadToEnd(); 
       if (response.StatusCode != HttpStatusCode.OK) 
       { 
        throw new ResponseException(((int)response.StatusCode), 
         response.StatusCode.ToString(), request.RequestUri.ToString(), 
         responseString); 
       } 
       return responseString; 
      } 
     } 
     catch (WebException e) 
     { 
      using (WebResponse response = e.Response) 
      { 
       HttpWebResponse httpResponse = response as HttpWebResponse; 
       if (httpResponse != null) 
       { 
        using (Stream data = response.GetResponseStream()) 
        { 
         data.Position = 0; 
         throw new ResponseException(((int)httpResponse.StatusCode), 
           httpResponse.StatusCode.ToString(), request.RequestUri.ToString(), 
           new StreamReader(data).ReadToEnd() 
          ); 
        } 
       } 
       else 
       { 
        throw; 
       } 

阅读其他线程后,我确定Apache HttpComponents库是我最好的选择,以获得相同的功能。在这里阅读文档和下面的例子后:

http://hc.apache.org/httpcomponents-client-ga/quickstart.html

我无法弄清楚如何身体发送字符串为XML。当我尝试为请求设置实体时,它要求我声明BasicNameValuePair,并且我不明白这是什么,或者我将如何格式化正文字符串以符合此规范。 以下是我目前所做的。

protected static String Send(String url, String body) 
{ 
    HttpPost request = new HttpPost(url); 

    try 
    { 
     request.setHeader("ContentType", "application/xml; charset=utf=8"); 

     // Encode the body if needed 
     request.setEntity(new UrlEncodedFormEntity()); 

     //get the response 

     // if the response code is not valid throw a ResponseException 

     // else return the response string. 

    } finally { 
     request.releaseConnection(); 
    } 
    return null; 
} 

编辑:或者我应该使用StringEntity并执行以下操作

protected static String SendToJetstream(String url, String body) 
{ 
    HttpPost request = new HttpPost(url); 

    try 
    { 
     StringEntity myEntity = new StringEntity(body, 
       ContentType.create("application/xml", "UTF-8")); 


     // Encode the body if needed 
     request.setEntity(myEntity); 

     //get the response 

     // if the response code is not valid throw a ResponseException 

     // else return the response string. 

    } finally { 
     request.releaseConnection(); 
    } 
    return null; 
} 

回答

相关问题