RUDE

OpenSSL BIO_read ist falsch

Dies ist der Code, wie ich die Antwort von meiner HTTPS-Anfrage lese:

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);

Die Antwort sollte ein "minimiertes" JSON sein (keine neuen Zeilen), aber aus irgendeinem Grund sehe ich einige "zufällig" eingefügte \r\n, wenn ich mir die Antwort mit einem HEX-Editor ansehe:

Bild

33 35 2C 2D 31 31 35 0D 0A 31 30 30 30 0D 0A

Dies ist ein Auszug aus einem JSON-Array, also sollte statt \r\n nur ein , stehen.

Auch der HTTP-Antworttext enthält einige seltsame Zeichen vor dem eigentlichen JSON:

Bild

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

Zwischen einem JSON-Array (mit nur Zahlen) befinden sich drei Zeichen, die nicht vorhanden sein sollten:

Bild

Ead

Und nach dem JSON gibt es eine zusätzliche 0, die nicht da sein sollte:

Bild

0.

Der einzige Grund, an den ich denken kann, ist eine Verletzung der Speicherbeschränkung.

Das zurückgegebene JSON ist abgesehen von den erwähnten Fehlern korrekt und das Backend hat keine Probleme mit der Anfrage, daher gehe ich davon aus, dass es korrekt ist.

Irgendwelche Ideen, wie ich das beheben kann?


18
1

Antwort:

Gelöst

Dies geschah, weil meine Anfrage HTTP/1.1 hat

POST /my/endpoint HTTP/1.1
Host: localhost
Content-Type: multipart/form-data; boundary=123456
Content-Length: 83031
Connection: close

Wenn ich es zu HTTP/1.0 ändere, verschwinden die Artefakte.