我正在尝试使用c#和SslClient向Web服务发送POST请求。 TLS连接似乎有效,当我发送GET请求时,服务器会用状态码200和所需的内容回答我。
当我尝试发送POST请求时出现了我的问题。服务器始终返回BadRequest(400)错误。
我尝试检查服务器上的日志文件(位于HTTPERR文件夹中),但是没有任何帮助。
2019-02-11 14:41:50 IPClient PortClient IPServer PortServer---400-BadRequest-
我在Microsoft文档上读到,在处理请求时发生解析错误时,将记录BadRequest。
这是我尝试发送的请求的内容:
POST https://xcmci04g.formation.cm-cic.fr:4446/Service1.svc HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/soap+xml;charset=UTF-8;action="http://standards.iso.org/iso/CENTS16986/ServicePT/sendApdu"
Content-Length: 4
Host: xcmci04g.formation.cm-cic.fr:4446
Connection: close
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
toto
没有换行符:
POST https://xcmci04g.formation.cm-cic.fr:4446/Service1.svc HTTP/1.1\r\nAccept-Encoding: gzip,deflate\r\nContent-Type: application/soap+xml;charset=UTF-8;action=\"http://standards.iso.org/iso/CENTS16986/ServicePT/sendApdu\"\r\nContent-Length: 4\r\nHost: xcmci04g.formation.cm-cic.fr:4446\r\nConnection: close\r\nUser-Agent: Apache-HttpClient/4.1.1 (java 1.5)\r\n\r\ntoto\r\n\r\n
我读到有时“ \ r \ n”会导致http 400,但我不知道如何替换它们。
有人可以告诉我为什么我的服务器不接受我的请求吗?以及如何解决?
谢谢!
答案 0 :(得分:1)
错误是内容正文末尾的double extras CRLF(\r\n\r\n
)上的问题,这不是SSL问题。
说明:
您宣布内容主体的长度为4
Content-Length: 4
最后,您通过实际发送来误导服务器:
toto\r\n\r\n
这是8个长度。
这就是为什么您收到400错误请求的原因。
正文内容末尾的\r\n\r\n
不是HTTP。如果它不是正文内容的一部分,则应将其删除,否则将Content-length
设置为8。