查看: 29|回覆: 0

libcurl post请求报错:Server returned nothing (no headers, no data)

[複製鏈接]

1

主題

1

回帖

0

積分

热心网友

金币
1
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2009-4-26
發表於 2026-3-5 10:00:00 | 顯示全部樓層 |閲讀模式

问题描述:

同一份libcurl post请求代码,在ubuntu下可以正常执行,而在windows下,curl_easy_perform却返回 52

curl_easy_strerror(52)返回: Server returned nothing (no headers, no data)

原因:

在windows下,libcurl自动添加了一个请求头 Expect: 100-continue

HTTP/1.1 协议里设计 100 (Continue) HTTP 状态码的的目的是,在客户端发送 Request Message 之前,HTTP/1.1 协议允许客户端先判定服务器是否愿意接受客户端发来的消息主体(基于 Request Headers)。

即, 客户端 在 Post(较大)数据到服务端之前,允许双方“握手”,如果匹配上了,Client 才开始发送(较大)数据。

这么做的原因是,如果客户端直接发送请求数据,但是服务器又将该请求拒绝的话,这种行为将带来很大的资源开销。

如果 client 预期等待“100-continue”的应答,那么它发的请求必须包含一个 " Expect: 100-continue" 的头域!

libcurl自动添加的请求头 Expect: 100-continue,会导致请求头和请求体分开两次发送。

但并不是所有的 Server 都会正确实现 100-continue 协议。

解决办法:

在libcurl的post请求代码中删除请求头 Expec 即可,确保请求头和请求体一起发送



来源:https://www.cnblogs.com/badbadguyisland/p/19671346
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部