Что эквивалентно XMLHTTP из VB6 в C# .Net 2005?

Я пытаюсь преобразовать код, который отлично работал в VB, но не могу понять, какие объекты использовать в .Net.

    Dim oXMLHttp As XMLHTTP
    oXMLHttp = New XMLHTTP
    oXMLHttp.open "POST", "https://www.server.com/path", False
    oXMLHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    oXMLHttp.send requestString 

По сути, я хочу отправить XML-файл на сервер, а затем сохранить ответ, который он возвращает. Может ли кто-нибудь указать мне в этом правильном направлении?

Принятый ответ - не C#, если вы переносите VB6 на VB.NET и хотели бы сохранить как можно больше кодовой базы, а затем переназначить ее на VB.NET.

AnthonyWJones 10.10.2008 13:42

попробуйте эту ссылку: stackoverflow.com/questions/6079282/…

Abhishek.Chopra 30.05.2012 19:06
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
7 959
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

См. Следующий пример, который делает это: http://www.codeproject.com/KB/dotnet/NET_Interact_j2EE.aspx Образец я поместил ниже. Извините, я знаю, что он большой, но вы никогда не знаете, как долго такие ссылки будут оставаться в силе. ПРИМЕЧАНИЕ: в первой версии вопроса не было сказано в C# .NET - просто говорилось «в .NET». (возможно, он был помечен как C#, и я этого не видел) Конвертировать из VB.NET в C# довольно просто (хотя и не нужно). 'Этот класс представляет ту же функциональность, что и объект xmlHTTP в MSXML.XMLHTTP.

Imports System.Net
Imports System.Web.HttpUtility

Public Class XMLHTTP
'Makes an internet connection to specified URL 
   Public Overridable Sub open(ByVal bstrMethod As String, _
     ByVal bstrUrl As String, Optional ByVal varAsync As _
     Object = False, Optional ByVal bstrUser _
     As Object = "", Optional ByVal bstrPassword As Object = "")
       Try
           strUrl = bstrUrl
           strMethod = bstrMethod

           'Checking if proxy configuration 
           'is required...(blnIsProxy value 
           'from config file)
           If blnIsProxy Then
           'Set the proxy object
               proxyObject = WebProxy.GetDefaultProxy()

               'Finding if proxy exists and if so set 
               'the proxy configuration parameters...
               If Not (IsNothing(proxyObject.Address)) Then
                   uriAddress = proxyObject.Address
                   If Not (IsNothing(uriAddress)) Then
                       _ProxyName = uriAddress.Host
                       _ProxyPort = uriAddress.Port
                   End If
                   UpdateProxy()
               End If
               urlWebRequest.Proxy = proxyObject
           End If

           'Make the webRequest...
           urlWebRequest = System.Net.HttpWebRequest.Create(strUrl)
           urlWebRequest.Method = strMethod

           If (strMethod = "POST") Then
               setRequestHeader("Content-Type", _
                   "application/x-www-form-urlencoded")
           End If

           'Add the cookie values of jessionid of weblogic 
           'and PH-Session value of webseal 
           'for retaining the same session
           urlWebRequest.Headers.Add("Cookie", str_g_cookieval)

       Catch exp As Exception
           SetErrStatusText("Error opening method level url connection")
       End Try
   End Sub
   'Sends the request with post parameters...
   Public Overridable Sub Send(Optional ByVal objBody As Object = "")
       Try
           Dim rspResult As System.Net.HttpWebResponse
           Dim strmRequestStream As System.IO.Stream
           Dim strmReceiveStream As System.IO.Stream
           Dim encode As System.Text.Encoding
           Dim sr As System.IO.StreamReader
           Dim bytBytes() As Byte
           Dim UrlEncoded As New System.Text.StringBuilder
           Dim reserved() As Char = {ChrW(63), ChrW(61), ChrW(38)}
           urlWebRequest.Expect = Nothing
           If (strMethod = "POST") Then
               If objBody <> Nothing Then
                   Dim intICounter As Integer = 0
                   Dim intJCounter As Integer = 0
                   While intICounter < objBody.Length
                     intJCounter = _
                       objBody.IndexOfAny(reserved, intICounter)
                     If intJCounter = -1 Then
UrlEncoded.Append(System.Web.HttpUtility.UrlEncode(objBody.Substring(intICounter, _
                                                    objBody.Length - intICounter)))
                       Exit While
                     End If
UrlEncoded.Append(System.Web.HttpUtility.UrlEncode(objBody.Substring(intICounter, _
                                                        intJCounter - intICounter)))
                     UrlEncoded.Append(objBody.Substring(intJCounter, 1))
                     intICounter = intJCounter + 1
                   End While

                   bytBytes = _
                     System.Text.Encoding.UTF8.GetBytes(UrlEncoded.ToString())
                   urlWebRequest.ContentLength = bytBytes.Length
                   strmRequestStream = urlWebRequest.GetRequestStream
                   strmRequestStream.Write(bytBytes, 0, bytBytes.Length)
                   strmRequestStream.Close()
                Else
                    urlWebRequest.ContentLength = 0
               End If
           End If
           rspResult = urlWebRequest.GetResponse()
           strmReceiveStream = rspResult.GetResponseStream()
           encode = System.Text.Encoding.GetEncoding("utf-8")
           sr = New System.IO.StreamReader(strmReceiveStream, encode)

           Dim read(256) As Char
           Dim count As Integer = sr.Read(read, 0, 256)
           Do While count > 0
               Dim str As String = New String(read, 0, count)
               strResponseText = strResponseText & str
               count = sr.Read(read, 0, 256)
           Loop
       Catch exp As Exception
           SetErrStatusText("Error while sending parameters")
           WritetoLog(exp.ToString)
       End Try
   End Sub
   'Setting header values...
   Public Overridable Sub setRequestHeader(ByVal bstrHeader _
                         As String, ByVal bstrValue As String)
       Select Case bstrHeader
            Case "Referer"
                urlWebRequest.Referer = bstrValue
            Case "User-Agent"
                urlWebRequest.UserAgent = bstrValue
            Case "Content-Type"
                urlWebRequest.ContentType = bstrValue
            Case Else
                urlWebRequest.Headers(bstrHeader) = bstrValue
       End Select
   End Sub

   Private Function UpdateProxy()
       Try
           If Not (IsNothing(uriAddress)) Then
               If ((Not IsNothing(_ProxyName)) And _
                 (_ProxyName.Length > 0) And (_ProxyPort > 0)) Then
                   proxyObject = New WebProxy(_ProxyName, _ProxyPort)
                   Dim strByPass() As String = Split(strByPassList, "|")
                   If strByPass.Length > 0 Then
                       proxyObject.BypassList = strByPass
                   End If
                   proxyObject.BypassProxyOnLocal = True
                   If blnNetworkCredentials Then
                       If strDomain <> "" Then
                           proxyObject.Credentials = New _
                             NetworkCredential(strUserName, _
                             strPwd, strDomain)
                       Else
                            proxyObject.Credentials = New _
                              NetworkCredential(strUserName, _
                              strPwd)
                       End If
                   End If
               End If
           End If
       Catch exp As Exception
           SetErrStatusText("Error while updating proxy configurations")
           WritetoLog(exp.ToString)
       End Try
   End Function
   'Property for setting the Responsetext
   Public Overridable ReadOnly Property ResponseText() As String
       Get
           ResponseText = strResponseText
       End Get
   End Property

   Private urlWebRequest As System.Net.HttpWebRequest
   Private urlWebResponse As System.Net.HttpWebResponse
   Private strResponseText As String
   Private strUrl As String
   Private strMethod As String
   Private proxyObject As WebProxy
   Private intCount As Integer
   Private uriAddress As Uri
   Private _ProxyName As String
   Private _ProxyPort As Integer
End Class

Я предполагаю, потому что блок кода был большим, но вы никогда не знаете, как долго такие ссылки будут оставаться действительными. И делает именно то, что хочет!

Booji Boy 10.10.2008 06:59

P.S. найдено с помощью searchdotnet.com Пользовательский поиск в Google, выполненный Дэном Эпплманом!

Booji Boy 10.10.2008 07:01

Ой! Это много кода! Но это похоже на замену моему существующему коду. Спасибо!

Matt Dawdy 10.10.2008 07:03

Возможно, вам следует перенести приведенный выше код на C#, чтобы соответствовать вопросу, который запрашивает эквивалент на C#.

AnthonyWJones 10.10.2008 13:45

Я не думаю, что в первой версии вопроса говорилось. в C# .NET - просто сказано «в .NET».

Booji Boy 10.10.2008 16:26

В любом случае, зачем вам портировать с VB6 на C#?

Booji Boy 10.10.2008 23:46

Мне нужно перенести с VB6 на C#, потому что весь мой личный старый код находится на VB6, но мы используем C# на моей новой работе. Итак, я не хочу перетаскивать старые методологии в .Net, но опять же, я не хочу тратить 8 часов на преобразование, которое можно было бы сделать в 1.

Matt Dawdy 12.10.2008 08:44

Есть ли эквивалентная функция getAllResponseHeaders ()?

Brain2000 10.04.2017 23:51

Ответ - использовать класс WebClient: -

WebClient webClient = new WebClient();

NameValueCollection values = new NameValueCollection();

values.add("firstname", "Slarti");
values.add("lastname", "Bart-fast");

byte[] response = webClient.UploadValues("http://server/path", values);

Метод UploadValues ​​создает запрос POST с типом содержимого application/x-www-form-urlencoded и правильно кодирует набор значений, перечисленных в переданном ему NameValueCollection.

Ответ представляет собой массив байтов, с которым вы можете сделать что-нибудь подходящее.

Другие вопросы по теме