在弹出窗口中显示来自Web服务器的响应

时间:2017-08-15 01:51:48

标签: c# winforms curl post

我有一个Windows窗体,它向Web服务器提交POST请求。这将返回一个网址。

当您对网络服务器进行卷曲时,会发生以下情况:

curl -d 'info={ "EmployeeID": [ "1234567", "7654321" ], "Salary": true, "BonusPercentage": 10}' http://example.com/xyz/php/api/createjob.php

返回的网址

http://example.com/xyz#newjobapi:id=19

现在我想在Windows窗体上复制上述过程,当用户单击该按钮时,它会将所需信息从Windows窗体发布到服务器。

但点击按钮后我没有得到任何回复。它只显示一个空的messageBox。

请告诉我如何将服务器返回的URL显示为弹出窗口。感谢。

我的C#代码:

private void button8_Click(object sender, EventArgs e)
{
    HttpWebRequest webRequest;
    string requestParams = "\'info={ \"EmployeeID\": [ \"1234567\", \"7654321\" ], \"Salary\": true, \"BonusPercentage\": 10}\'"; 
    byte[] byteArray = Encoding.UTF8.GetBytes(requestParams);


    webRequest = (HttpWebRequest)WebRequest.Create("http://example.com/xyz/php/api/createjob.php");

    webRequest.Method = "POST";
    webRequest.ContentType = "application/json";            
    webRequest.ContentLength = byteArray.Length;

    using (Stream requestStream = webRequest.GetRequestStream())
    {
        requestStream.Write(byteArray, 0, byteArray.Length);
    }

    // Get the response.
    using (WebResponse response = webRequest.GetResponse())
    {
        using (Stream responseStream = response.GetResponseStream())
        {
            StreamReader rdr = new StreamReader(responseStream, Encoding.UTF8);
            string Json = rdr.ReadToEnd(); // response from server
            MessageBox.Show("URL Returned: " + Json);

        }
    }
}

1 个答案:

答案 0 :(得分:1)

如果我执行此操作:

setItems()

这是输出的一部分:

curl --trace con -d "info={ 'Blah': 10}" http://example.com/xyz/php/api/createjob.php

这意味着:

00a0: 0d 0a 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 ..Content-Type:
00b0: 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 77 77 application/x-ww
00c0: 77 2d 66 6f 72 6d 2d 75 72 6c 65 6e 63 6f 64 65 w-form-urlencode
00d0: 64 0d 0a 0d 0a                                  d....

不以PHP理解的方式发送数据。我的猜测是PHP正在做这样的webRequest.ContentType = "application/json"; 服务器端。期待form values to be posted

相反,您应该发送curl发送的内容:

$info = $_POST['info']

因为它会发送一个表单并用PHP填充webRequest.ContentType = "application/x-www-form-urlencoded"; 数组。