繁体   English   中英

带有HttpWebRequest的“ POST”无法正常工作

[英]“POST” with HttpWebRequest not working correctly

我正在尝试将一些xml发布到http://api.opensubtitles.org:80/xml-rpc ,但是它不起作用。 如果我使用https://www.hurl.it/ ,则会得到期望的响应,但不会收到C#。 这是xml:

<?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;
    }

我从服务器收到“解析错误。格式不正确”。 到底怎么了?

您忘记了按照XMLRPC规范将参数列表放在<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小提琴演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM