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 机器上实现。
谢谢。
如果我 运行 我的 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)
中发现 (:) 上的白色 spaceAccess-Control-Allow-Methods : POST,GET,OPTIONS
应该是:
Access-Control-Allow-Methods: POST,GET,OPTIONS
显然,(你可以在上面的 link 上查看整个问题)如果你 运行 在 Windows 机器上应用程序,这仍然读取 headers 正确(有或没有白色 space)。他们现在创建了一个问题,所以这也可以在 linux 机器上实现。
谢谢。