C++ 使用BIO_读取时的部分HTTP响应
是否可以使用BIO_read(C++)从服务器获取HTTP响应 当我尝试对http响应使用C++ 使用BIO_读取时的部分HTTP响应,c++,http,ssl,https,openssl,C++,Http,Ssl,Https,Openssl,是否可以使用BIO_read(C++)从服务器获取HTTP响应 当我尝试对http响应使用BIO_read(BIO,buffer,sizeof(buff))时,在缓冲区中我只得到部分响应,而不是全部响应 如果有可能,请展示一个获得完整响应的示例 是否可以使用BIO_read从服务器获取HTTP响应 对 如果有可能,请展示一个获得完整响应的示例 从OpenSS wiki上的: #define HOST_NAME "www.random.org" #define HOST_PORT "443" #
BIO_read(BIO,buffer,sizeof(buff))
时,在缓冲区中我只得到部分响应,而不是全部响应
如果有可能,请展示一个获得完整响应的示例
是否可以使用BIO_read从服务器获取HTTP响应
对
如果有可能,请展示一个获得完整响应的示例 从OpenSS wiki上的:
#define HOST_NAME "www.random.org"
#define HOST_PORT "443"
#define HOST_RESOURCE "/cgi-bin/randbyte?nbytes=32&format=h"
...
BIO *web = NULL, *out = NULL;
...
BIO_puts(web, "GET " HOST_RESOURCE " HTTP/1.1\r\n"
"Host: " HOST_NAME "\r\n"
"Connection: close\r\n\r\n");
BIO_puts(out, "\n");
...
int len = 0;
do
{
char buff[1536] = {};
len = BIO_read(web, buff, sizeof(buff));
if(len > 0)
BIO_write(out, buff, len);
} while (len > 0 || BIO_should_retry(web));
你应该注意两件事。首先,检查BIO_read
的返回值。其次,BIO\u should\u retry
用于检测是否由于潜在的竞争而有更多的数据需要读取
这不是一个完整的例子。在生产过程中,应该对BIO
执行部分读取。您可以从响应头确定响应的长度。然后添加第三个条件和安全阀-预期响应长度。对于提供错误响应长度的坏web服务器和坏代理,您需要一个安全阀
如果从HTTP请求中删除
连接:close
,则需要解析HTTP响应并获得预期长度。上面的代码之所以有效,主要是因为服务器关闭了连接,这是一个带外信号,您可以使用它来完全接收响应。我可以用Cout而不是BIO_write打印服务器答案吗?