我有一个程序可以将 POST 请求发送到服务器。
我正在使用 cURL 发送请求。
我的程序在 Windows 和 Linux 上运行(目前是 Ubuntu 9.10)。
当服务器收到请求时,它会处理它并返回错误代码(如果没有错误,则返回 0000)和错误描述(如果有)。
服务器的 Web 服务器是 Microsoft IIS。
当我在 Windows 上运行我的程序时,它运行良好。
但是当我在 Linux 上运行程序时,它会挂起 30 秒(cURL 超时)并返回错误“操作在 30000 毫秒后超时,收到 5 个字节”。
正如我所知道的服务器端的问题 - 服务器不发送响应的大小并且不关闭套接字连接。
cURL 日志(来自 Linux):
11:00:09.544 Process() curl: libcurl/7.19.5 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.15
11:00:09.941 DebugCallback() About to connect() to sms1.redoxygen.net port 80 (#0)
11:00:09.941 DebugCallback() Trying 203.145.62.146...
11:00:10.084 DebugCallback() Connected to sms1.redoxygen.net (203.145.62.146) port 80 (#0)
11:00:10.085 DebugCallback() POST /sms.dll?private&type=26 HTTP/1.1
Host: sms1.redoxygen.net
Content-Length: 244
11:00:10.086 DebugCallback() [244 bytes of DATA]
11:00:10.087 ReadCallback() No more data to send
11:00:10.292 WriteCallback() HTTP/1.1 200 OK
11:00:10.293 DebugCallback() Content-Type: text/html
11:00:10.294 DebugCallback() no chunk, no close, no size. Assume close to signal end
11:00:10.294 WriteCallback()
11:00:10.466 DebugCallback() 0000
11:00:40.500 DebugCallback() Operation timed out after 30000 milliseconds with 5 bytes received
11:00:40.501 DebugCallback() Closing connection #0
在 Windows 上的日志几乎相同,但没有超时 - 它在收到“0000”后立即关闭套接字。
如果我得到“0000”,我可以分析接收到的数据并关闭连接,但这是一个“肮脏的黑客”。
有任何想法吗?