【问题标题】:How to receive and show cURL/API requests in C# with webRequest Class如何使用 webRequest 类在 C# 中接收和显示 cURL/API 请求
【发布时间】:2015-07-22 19:08:24
【问题描述】:

我的 c# 程序在向在线电话系统发送或接收 cURL 请求时遇到问题,我希望在那里得到一些帮助:)

我向服务器发送这样的命令:

curl https://api.placetel.de/api/test \
    -d 'api_key=XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX'

服务器以 XML 形式返回:

<?xml version="1.0" encoding="UTF-8"?>
<hash>
  <result>1</result>
  <result-code>success</result-code>
  <descr>test login successful v1.1</descr>
</hash>

我尝试了WebRequest Class (msdn)

有一个来自电话在线系统提供商的 API documentation,但只有德语。

好的,连接是这样的:

        WebRequest request = WebRequest.Create("https://api.placetel.de/api/test.xml");
        request.Method = "POST";
        string postData = "-d 'api_key=XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX'";
        byte[] byteArray = Encoding.UTF8.GetBytes(postData);

为了向我展示来自服务器的“答案”,我尝试这样做:

            Stream dataStream = request.GetRequestStream();              
            dataStream.Write(byteArray, 0, byteArray.Length);                
            dataStream.Close();               
            WebResponse response = request.GetResponse();
           Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            dataStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream);
            string responseFromServer = reader.ReadToEnd();
            Console.WriteLine(responseFromServer);
            reader.Close();
            dataStream.Close();
            response.Close();

现在我在以下位置收到错误消息:

Stream dataStream = request.GetRequestStream();
“System.dll 中出现错误 System.Net.WebException” 连接服务器失败

我怎样才能解决这个问题并显示来自服务器的“答案”。

【问题讨论】:

  • 我强烈建议您使用 HttpClient 而不是更老的 WebRequest 类。另外,请将您的错误消息以文本形式发布在帖子正文中,而不是屏幕截图。
  • 而且英文也有错误,这样你会得到更多的帮助,因为人们将能够理解它。
  • “System.dll 中的错误 System.Net.WebException” 连接服务器失败
  • “与服务器的连接失败”不是 .NET 异常。显示实际的完整异常、HTTP 状态代码和响应正文。此外,您不需要-d(这很可能是异常的原因,因为服务器返回错误状态),这是“数据”的 cURL 命令行选项。

标签: c# curl webrequest


【解决方案1】:
WebRequest request = WebRequest.Create("https://api.placetel.de/api/test.xml");
            request.Method = "POST";
            string postData = "api_key=XXXXXXXXXXXXXXX";
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);


            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            WebResponse response = request.GetResponse();
            textBox1.Text = (((HttpWebResponse)response).StatusDescription);      
            //Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            dataStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream);
            string responseFromServer = reader.ReadToEnd();
            textBox2.Text = (responseFromServer);
            reader.Close();
            dataStream.Close();
            response.Close();

工作 :) 谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 2012-06-16
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    相关资源
    最近更新 更多