http请求之前和之后的垃圾
trash before body of http request and after
在某些站点到HTTPS主体上,在之前和之后添加垃圾。我不知道这是什么。大多数网站都可以正常工作。也许问题在于HTTPS?什么是B7和0?为什么?
请求:
GET /api/3/ticker/ltc_btc? HTTP/1.1
Host: yobit.net
Content-Length: 0
Connection: close
Accept-Encoding: identity
响应:
HTTP/1.1 200 OK
Date: Fri, 26 Jul 2019 22:34:41 GMT
Content-Type: text/html; charset=utf8
Transfer-Encoding: chunked
Connection: close
Set-Cookie: __cfduid=d1d616fde8dba864f15748d871ff9819f1564180481; expires=Sat, 25-Jul-20 22:34:41 GMT; path=/; domain=.yobit.net; HttpOnly; Secure
Set-Cookie: locale=en; expires=Thu, 26-Jul-2029 22:34:41 GMT; path=/
Vary: Accept-Encoding
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block;
x-download-options: noopen
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Server: cloudflare
CF-RAY: 4fc9d7a81c548ff7-DME
b7
{"ltc_btc":{"high":0.00964924,"low":0.00935811,"avg":0.00950367,"vol":192.35202559,"vol_cur":20190.08465994,"last":0.00964229,"buy":0.00957471,"sell":0.00964486,"updated":1564180338}}
0
Response sendHTTPS(Request& request) {
WSADATA wsaData;
WORD DllVersion = MAKEWORD(2, 2);
if (WSAStartup(DllVersion, &wsaData)) {
return Response();
}
std::string req = str(request);
addrinfo* pAddrInfo;
getaddrinfo(request.uri.host().c_str(), "443", 0, &pAddrInfo);
SOCKET connection = socket(
pAddrInfo->ai_family,
pAddrInfo->ai_socktype,
pAddrInfo->ai_protocol
);
if (!connection)
return Response();
int error = connect(connection, pAddrInfo->ai_addr, pAddrInfo->ai_addrlen);
if (error)
return Response();
SSL_library_init();
SSLeay_add_ssl_algorithms();
SSL_load_error_strings();
const SSL_METHOD *meth = TLSv1_2_client_method();
SSL_CTX *ctx = SSL_CTX_new(meth);
SSL *ssl = SSL_new(ctx);
if (!ssl)
return Response();
int sock = SSL_get_fd(ssl);
SSL_set_fd(ssl, connection);
error = SSL_connect(ssl);
if (error <= 0)
return Response();
int len = SSL_write(ssl, req.c_str(), req.size());
if (len <= 0)
return Response();
std::string result = "";
char buffer[16384] = { 0 };//16 kib
int bytes_recv = 0;
do {
bytes_recv = SSL_read(ssl, buffer, sizeof(buffer));
if (bytes_recv > 0)
result.append(buffer, bytes_recv);
} while (bytes_recv > 0);
closesocket(connection);
SSL_shutdown(ssl);
SSL_free(ssl);
SSL_CTX_free(ctx);
return Response(result);
}
这不是"垃圾",而是http 1.1的基本部分。这是块的内容传输编码,请参见RFC 2616的第3.6.1节。
Transfer-Encoding: chunked
在响应的标题中。如果响应包含这样的标头,则需要使用块状传输编码来解码响应的内容。这不是很复杂,请参见RFC 2616。
另外,您可以在原始请求中指定HTTP/1.0
,以向服务器指示您的手写的HTTP客户端不支持协议级别1.1。HTTP 1.0没有块的传输编码,也不需要处理。
但是,如果您的应用程序需要其他一些HTTP 1.1功能,则您别无选择,但可以准备处理服务器中任何响应中的块传输编码。您的客户无需指示它是否接受编码到服务器的大块传输。是否发送块完全取决于服务器。
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在类定义之后定义一个私有方法
- 在循环C++中指定字符串之后,不会打印该字符串
- 如何在boost beast http请求中设置http头
- 发送一个带有libcurl C++问题的帖子请求:s
- C++宏忽略之后的内容
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 在多个核心中处理一个HTTP请求
- strncpy之后的char数组的错误行为
- 计算十进制 c++ 之后的数字
- "x += x--"之后的 x 是什么?
- 类的前向声明之后的类成员函数定义,在类声明之前
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 错误:请求非类类型为"MULTIMEDIA_FILME [500]"的成员|
- execlp() 在 fork() 之后无法正常工作
- 使用 Winsock2.h C++向不和谐 API 发送 HTTP 请求时出现问题
- 每个服务器请求的内存预算
- 我认为我的代码很好,但它在 cin a 之后停止并且没有进一步?
- http请求之前和之后的垃圾