HttpClient.PostAsync 无法识别的响应

HttpClient.PostAsync Unrecognized Response

如果我 运行 我的 web 应用程序在 Windows 机器上一切正常。当我 运行 这个应用程序在 Linux (CentOS) 机器上时,我在尝试发送 Post 请求时收到以下异常:

System.Net.Http.HttpRequestException: The server returned an invalid or unrecognized response. at System.Net.Http.CurlResponseHeaderReader.ReadHeader(String& headerName, String& headerValue) at System.Net.Http.CurlHandler.MultiAgent.CurlReceiveHeadersCallback(IntPtr buffer, UInt64 size, UInt64 nitems, IntPtr context) --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)

这是进行 post 调用的代码:

    Uri uri = new Uri(ServiceConfiguration.SERVICE_URL);

    string sSOAPResponse = String.Empty;

    HttpClient hc = new HttpClient();

    hc.DefaultRequestHeaders.Add("SOAPAction", oRequest.Action);

    var content = new StringContent(oRequest.RequestMessage, Encoding.UTF8, "text/xml");

    try
    {
        using (HttpResponseMessage response = await hc.PostAsync(uri, content))
        {

            sSOAPResponse = await response.Content.ReadAsStringAsync();
            (...)
         }

我猜这是因为我的 header 的定义。我还尝试在 linux 控制台上使用 curl 来发出请求,我得到了预期的响应。我对 header 定义做错了吗?

成功使用 CURL 命令示例 (Source)

curl --header "Content-Type: text/xml;charset=UTF-8" --header "SOAPAction: ACTION_YOU_WANT_TO_CALL" --data @FILE_NAME URL_OF_THE_SOAP_WEB_SERVICE_ENDPOINT

SOAP UI 请求(RAW):

POST http://xxx/xxx/xxx.php HTTP/1.1 Accept-Encoding: gzip,deflate Content-Type: text/xml;charset=UTF-8 SOAPAction: "http://xxx/xxx/xxx.php/userLogin" Content-Length: 488 Host: xxx Connection: Keep-Alive User-Agent: Apache-HttpClient/4.1.1 (java 1.5

伙计们,感谢 DNX 团队 GitHub,我已经解决了这个问题。我创建了一个线程来说明这个 link.

的问题

这是我所做的:

  • 我的 CentOS 服务器上有一个 PHP (NuSOAP) API 运行ning。我发送了显示 PHP headers 信息的命令。

[root@su soaptest]# curl -I http://application.com/api/service.php

HTTP/1.1 200 OK Date: Tue, 07 Jun 2016 01:21:20 GMT Server: Apache/2.4.6 (CentOS) X-Powered-By: PHP/5.4.16 Access-Control-Allow-Headers: SOAPAction,Content-Type Access-Control-Allow-Origin: * Access-Control-Allow-Methods : POST,GET,OPTIONS Connection: close Content-Type: text/html; charset=utf-8

问题是在我的 PHP API 主页面(我的案例 service.php)

中发现 (:) 上的白色 space

Access-Control-Allow-Methods : POST,GET,OPTIONS

应该是:

Access-Control-Allow-Methods: POST,GET,OPTIONS

显然,(你可以在上面的 link 上查看整个问题)如果你 运行 在 Windows 机器上应用程序,这仍然读取 headers 正确(有或没有白色 space)。他们现在创建了一个问题,所以这也可以在 linux 机器上实现。

谢谢。