libcurl post请求报错:Server returned nothing (no headers, no data)
<h1 id="问题描述">问题描述:</h1><p>同一份libcurl post请求代码,在ubuntu下可以正常执行,而在windows下,<code>curl_easy_perform</code>却返回 52</p>
<p><code>curl_easy_strerror(52)</code>返回: Server returned nothing (no headers, no data)</p>
<h1 id="原因">原因:</h1>
<p>在windows下,libcurl自动添加了一个请求头 <strong>Expect: 100-continue</strong></p>
<blockquote>
<p>HTTP/1.1 协议里设计 100 (Continue) HTTP 状态码的的目的是,在客户端发送 Request Message 之前,HTTP/1.1 协议允许客户端先判定服务器是否愿意接受客户端发来的消息主体(基于 Request Headers)。</p>
<p>即, 客户端 在 Post(较大)数据到服务端之前,允许双方“握手”,如果匹配上了,Client 才开始发送(较大)数据。</p>
<p>这么做的原因是,如果客户端直接发送请求数据,但是服务器又将该请求拒绝的话,这种行为将带来很大的资源开销。</p>
<p>如果 client 预期等待“<strong>100-continue</strong>”的应答,那么它发的请求必须包含一个 " Expect: 100-continue"的头域!</p>
</blockquote>
<p>libcurl自动添加的请求头 <strong>Expect: 100-continue</strong>,会导致请求头和请求体分开两次发送。</p>
<p>但并不是所有的 Server 都会正确实现 <strong>100-continue</strong> 协议。</p>
<h1 id="解决办法">解决办法:</h1>
<p>在libcurl的post请求代码中删除请求头 <strong>Expec</strong> 即可,确保请求头和请求体一起发送</p><br><br>
来源:https://www.cnblogs.com/badbadguyisland/p/19671346
頁:
[1]