2015-02-06 7 views
0

Я пытаюсь преобразовать следующее в C# без большой удачи.PHP Curl to C# Webclient/HTTPRequest

<?php 
$data = '<xml>my xml request here</xml>'; 
$tuCurl = curl_init(); 
curl_setopt($tuCurl, CURLOPT_URL, "http://myendpoint"); 
curl_setopt($tuCurl, CURLOPT_PORT , 443); 
curl_setopt($tuCurl, CURLOPT_VERBOSE, 0); 
curl_setopt($tuCurl, CURLOPT_HEADER, 0); 
curl_setopt($tuCurl, CURLOPT_POST, 1); 
curl_setopt($tuCurl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($tuCurl, CURLOPT_POSTFIELDS, $data); 
curl_setopt($tuCurl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml","SOAPAction: \"/soap/action/query\"", "Content-length: ".strlen($data))); 

Ниже приведено то, что я придумал, но я не получаю ожидаемого результата. Есть ли что-то, что я просто пропустил в своем C#?

using (var client = new System.Net.WebClient()) 
    { 
     var data = new NameValueCollection(); 
     data.Add("", "my xml here"); 

     var result = client.UploadValues("my endpoint here", data); 

     var str = Encoding.UTF8.GetString(result); 
    } 
+0

Вы не посылала никаких заголовков. Ваше преобразование кажется неполным. – Matthew

+0

Я попытался добавить следующее: client.Headers.Add («Content-Type», «text/xml»); client.Headers.Add ("SOAPAction", "/ soap/action/query"); client.Headers.Add («Content-length», document.InnerXml.Length.ToString()); – aherrick

+0

Мой главный вопрос: почему нет «ключа» для атрибута $ data. Словарь ключа/значения – aherrick

ответ

0

FYI Я понял это с помощью следующего фрагмента кода:

public static string POST(string url, string requestXML) 
    { 
     WebRequest webReq = HttpWebRequest.Create(url); 
     webReq.ContentType = "application/x-www-form-urlencoded"; 
     webReq.Method = "POST"; 

     using (var stream = webReq.GetRequestStream()) 
     { 
      var arrBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(requestXML); 
      stream.Write(arrBytes, 0, arrBytes.Length); 
      stream.Close(); 
     } 

     WebResponse webResp = webReq.GetResponse(); 
     var respStream = webResp.GetResponseStream(); 
     var reader = new StreamReader(respStream, System.Text.Encoding.ASCII); 
     string strResponse = reader.ReadToEnd(); 
     respStream.Close(); 

     return strResponse; 
    } 

http://vh4u.blogspot.com/2015/02/using-dhl-web-services-in-your-net.html