我正在使用C中的curl库通过HTTPS编写文件上传。 服务器端使用ulfius框架运行一个小型Web应用程序。
我的代码看起来像这样(简短):
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数据包。 "客户端Hello"和"服务器Hello"消息也丢失了。
让我们假装服务器端正常工作,因为如果我切换到HTTP(服务器+客户端),一切正常。 我的代码的卷曲部分是否缺少某些东西? 似乎没有SSL / TLS握手。
答案 0 :(得分:0)
我尝试了您的代码,TLS / SSL连接正常。请尝试以下方法:
curl_easy_setopt(CURL *handle, CURLOPT_SSLVERSION, long version);
有关此命令的更多文档here。