OpenSSL BIO_read 错误
OpenSSL BIO_read is wrong
这是我读取 HTTPS 请求响应的代码:
int len = 0;
f = fopen("response.txt", "wb");
do
{
char buff[1534];
len = BIO_read(bio, buff, sizeof(buff));
if (len > 0) {
fwrite(buff, sizeof(char), len, f);
}
} while (len > 0 || BIO_should_retry(bio));
fclose(f);
响应应该是“最小化的”JSON(没有新行),但无论出于何种原因,如果我用十六进制编辑器:
Image
33 35 2C 2D 31 31 35 0D 0A 31 30 30 30 0D 0A
这是 JSON 数组的摘录,因此应该只有 ,
.
而不是 \r\n
此外,HTTP 响应正文在实际 JSON:
之前包含一些奇怪的字符
Image
HTTP/1.1 201 Created
Server: nginx/1.21.3
Date: Wed, 04 May 2022 11:22:22 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Location: http://myserver.de/my/endpoint
api-supported-versions: 1.0
1f1b
在 JSON 数组(只有数字)之间有三个不应该出现的字符:
Image
ead
在 JSON 之后还有一个不应该出现的 0:
Image
0
.
我能想到的唯一原因是违反了内存约束。
除了提到的错误之外,返回的 JSON 是正确的,并且后端对请求没有任何问题,所以我认为它是正确的。
有什么办法可以解决这个问题吗?
发生这种情况是因为我的请求 HTTP/1.1
POST /my/endpoint HTTP/1.1
Host: localhost
Content-Type: multipart/form-data; boundary=123456
Content-Length: 83031
Connection: close
如果我将其更改为 HTTP/1.0
,伪像就会消失。
这是我读取 HTTPS 请求响应的代码:
int len = 0;
f = fopen("response.txt", "wb");
do
{
char buff[1534];
len = BIO_read(bio, buff, sizeof(buff));
if (len > 0) {
fwrite(buff, sizeof(char), len, f);
}
} while (len > 0 || BIO_should_retry(bio));
fclose(f);
响应应该是“最小化的”JSON(没有新行),但无论出于何种原因,如果我用十六进制编辑器:
Image
33 35 2C 2D 31 31 35 0D 0A 31 30 30 30 0D 0A
这是 JSON 数组的摘录,因此应该只有 ,
.
\r\n
此外,HTTP 响应正文在实际 JSON:
之前包含一些奇怪的字符Image
HTTP/1.1 201 Created
Server: nginx/1.21.3
Date: Wed, 04 May 2022 11:22:22 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Location: http://myserver.de/my/endpoint
api-supported-versions: 1.0
1f1b
在 JSON 数组(只有数字)之间有三个不应该出现的字符:
Image
ead
在 JSON 之后还有一个不应该出现的 0:
Image
0
.
我能想到的唯一原因是违反了内存约束。
除了提到的错误之外,返回的 JSON 是正确的,并且后端对请求没有任何问题,所以我认为它是正确的。
有什么办法可以解决这个问题吗?
发生这种情况是因为我的请求 HTTP/1.1
POST /my/endpoint HTTP/1.1
Host: localhost
Content-Type: multipart/form-data; boundary=123456
Content-Length: 83031
Connection: close
如果我将其更改为 HTTP/1.0
,伪像就会消失。