2016-05-22 7 views
0

xmlをhttp://api.opensubtitles.org:80/xml-rpcに投稿しようとしていますが、機能しません。私がhttps://www.hurl.it/を使用すると、私は期待している応答を得るが、私のC#では期待していない。これはXMLです:HttpWebRequestが正しく動作していない "POST"

<?xml version='1.0' encoding='utf-8'?> 
<methodCall> 
<methodName>LogIn</methodName> 
<param> 
    <value><string></string></value> 
</param> 
<param> 
    <value><string></string></value> 
</param> 
<param> 
    <value><string></string></value> 
</param> 
<param> 
    <value> 
     <string>OSTestUserAgent</string> 
    </value> 
</param> 

そして、これは私のC#のである:

public static async Task<string> HttpRequest(string xml) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://api.opensubtitles.org:80/xml-rpc"); 
     request.Method = "POST"; 

     using (StreamWriter dataStream = new StreamWriter(await request.GetRequestStreamAsync())) 
     { 
      dataStream.Write(xml); 
      dataStream.Dispose(); 
     } 
     string result = null; 
     using (WebResponse response = await request.GetResponseAsync()) 
     { 
      using (Stream stream = response.GetResponseStream()) 
      { 
       using (StreamReader reader = new StreamReader(stream, Encoding.ASCII)) 
        result = reader.ReadToEnd(); 
      } 
     } 
     Debug.WriteLine(result); 
     return result; 
    } 

私は受信サーバーから "パースエラーがうまく形成されません。"。何が悪いの?

答えて

1

XMLRPC specificationのように、<params></params>タグにパラメータリストを入力するのを忘れてしまった。このコードは正常に動作します:

var myxml = 
    @"<?xml version='1.0' encoding='utf-8'?> 
    <methodCall> 
     <methodName>LogIn</methodName> 
     <params> 
      <param> 
       <value><string></string></value> 
      </param> 
      <param> 
       <value><string></string></value> 
      </param> 
      <param> 
       <value><string></string></value> 
      </param> 
      <param> 
       <value> 
        <string>OSTestUserAgent</string> 
       </value> 
      </param> 
     </params> 
    </methodCall>"; 

var request = (HttpWebRequest)WebRequest.Create("http://api.opensubtitles.org:80/xml-rpc"); 
request.Method = "POST"; 

using (var dataStream = new StreamWriter(await request.GetRequestStreamAsync())) 
{ 
    dataStream.Write(myxml); 
    dataStream.Dispose(); 
} 

string result = null; 

using (var response = await request.GetResponseAsync()) 
using (var stream = response.GetResponseStream()) 
using (var reader = new StreamReader(stream, Encoding.ASCII)) 
{ 
    result = reader.ReadToEnd(); 
} 


Debug.WriteLine(result); 

.Net Fiddle demo

関連する問題