0
我正在使用C中的curl庫通過HTTPS編寫文件上傳。 服務器端使用ulfius框架運行小型Web應用程序。通過HTTPS使用libcurl進行文件上傳C
我的代碼看起來是這樣的(短路):
CURL *curl;
CURLcode res;
void * buffer = NULL;
long length;
FILE *fd;
fd = fopen(filePath, "rb");
if (fd) {
fseek(fd, 0, SEEK_END);
length = ftell(fd);
fseek(fd, 0, SEEK_SET);
buffer = malloc(length * sizeof (void));
if (buffer) {
fread(buffer, 1, length, fd);
}
fclose(fd);
}
curl = curl_easy_init();
if (curl) {
struct curl_slist *chunk = NULL;
chunk = curl_slist_append(chunk, "Accept: */*");
chunk = curl_slist_append(chunk, "X-IsReplication: 1");
curl_easy_setopt(curl, CURLOPT_URL, "https://192.168.1.6:8080/upload/test.txt/");
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, length);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, buffer);
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
fprintf(stderr, "Error: %s\n", curl_easy_strerror(res));
} else {
printf("Success!\n");
}
curl_easy_cleanup(curl);
}
從curl_easy_strerror()的錯誤信息是: 「失敗接收來自所述對等體的數據時」。 如果我使用Wireshark進行捕獲,我會看到一些加密的TCP數據包,但沒有TLS數據包。 「客戶端問候」和「服務器問候」消息也丟失。
讓我們假裝服務器端工作正常,因爲如果我切換到HTTP(服務器+客戶端),一切正常。 我的代碼的捲曲部分中是否存在某些內容? 似乎沒有SSL/TLS握手。
我在服務器端發現了一個錯誤。上面的代碼是正確的。 – Radmor