2010-11-11 58 views
2

我想发送一个POST请求,将一些内容添加到API框中。该规则是人体格式应该是XML(值必须是XML转义),HTTP方法(POST),要求身份验证(是),请求内容(内容类型:“应用程序/ XML”XML转义字符

<entries? 
    <entry tag="some_tag"> 
    <value>XML-escaped-entry belongs here</value> 
    </entry> 
    <entry tag="some_tag"> 
    <value>XML-escaped-entry belongs here</value> 
.... 
... 

</entries> 

我发送请求如下,并得到一个400错误的请求错误它工作时,我进入了一个条目的值

For i As Integer = 0 To searchItems.Count - (1000 - max) 
       data = data + "<entries><entry><value>" & searchItems.Item(i) & "</value></entry></entries>" & vbNewLine 
      Next 
      If uri.Scheme = uri.UriSchemeHttps Then 
       Dim request As HttpWebRequest = HttpWebRequest.Create(uri) 
       request.Method = method__1 
       request.ContentLength = data.Length 
       request.ContentType = "application/xml" 
       request.Credentials = New System.Net.NetworkCredential("[email protected]", "xxxxxx") 
       Dim writer As New StreamWriter(request.GetRequestStream) 
       writer.Write(data) 
       writer.Close() 
       Dim oResponse As HttpWebResponse = request.GetResponse() 
       Dim reader As New StreamReader(oResponse.GetResponseStream()) 
       Dim tmp As String = reader.ReadToEnd() 
       oResponse.Close() 
      End If 

附加规则:。 - 最佳的做法是逐步添加和删除更改您的参赛名单,而不是每次需要更改时删除/重新创建整个列表 - 新条目放置在队列顶部用于投票并以LIFO方式处理。

+0

'method__1'在这里的价值是什么? – Michael 2010-11-11 18:01:03

回答

5

您需要在循环中查找并编码特殊字符。沿着线的东西:

For i As Integer = 0 To searchItems.Count - (1000 - max) 
      data = data + "<entries><entry><value>" & encodeEntry(searchItems.Item(i)) & "</value></entry></entries>" & vbNewLine 
Next 

Private Function encodeEntry(ByVal entry As String) As String 
    Dim returnValue As String = entry 

    ' Replace the special characters 
    returnValue = returnValue.Replace("&", "&amp;") 
    returnValue = returnValue.Replace("""", "&quot;") 
    returnValue = returnValue.Replace("'", "&apos;") 
    returnValue = returnValue.Replace("<", "&lt;") 
    returnValue = returnValue.Replace(">", "&gt;") 

    ' return the escaped string 
    return returnValue 
End Function 
+0

谢谢,让我试试 – vbNewbie 2010-11-11 18:05:40

+0

在这种情况下替换''''和'''应该是不必要的(因为代码不在属性中)。 – 2010-11-11 18:45:37

3
  1. 不要使用+运算符连接字符串,使用StringBuilder
  2. 请勿使用StringBuilder构建XML,请使用XmlWriter,它会照顾您的编码问题。