使用 Http Post 的 C Wininet 文件上传

标签 c winapi wininet

我正在尝试使用我的代码将 PDF 文件上传到我的 PHP 页面。但是我只能上传一部分。当我在 Firefox 中打开它时,它说 PDF 已损坏。此外,当我查看 a 的值时,它只是文件的一小部分。我该如何解决这个问题?

char *getmem();
int main(int argc, char *argv[]) 
{

char *a = getmem();
printf ("%s\n",a);
        HINTERNET hInet = InternetOpen(NULL, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
char frmdata[160000];
sprintf(frmdata,"-----------------------------acebdf13572468\r\nContent-Disposition: form-data; name=\"uploaded\"; filename=\"C:\\Users\\pen\\Desktop\\perltut.pdf\"\r\nContent-Type: application/pdf\r\n\r\n%s\r\n-----------------------------acebdf13572468--\r\n",a);

 char *hdrs = "Content-Type: multipart/form-data; boundary=---------------------------acebdf13572468\nUser-Agent: aa";
MessageBox(0,a,a,1);
        HINTERNET hConnect = InternetConnect(
                        hInet,
                        "host",
                        80,
                        NULL,
                        NULL,
                        INTERNET_SERVICE_HTTP,
                        0, 0
        );
LPCSTR accept[2]={"*/*", NULL};
        HINTERNET hRequest = HttpOpenRequest(
                hConnect,
                "POST",
                "/path",
                NULL, NULL, NULL, 0, 0
        );

        BOOL ret = HttpSendRequest(hRequest, hdrs,strlen(hdrs), frmdata, strlen(frmdata));





    system("pause");
    return 0;
}



char *getmem(){


FILE *fp;
long len;
char *buf;
fp=fopen("C:\\Users\\ff\\Desktop\\perltut.pdf","rb");
fseek(fp,0,SEEK_END); 
len=ftell(fp); 
fseek(fp,0,SEEK_SET); /
buf=(char *)malloc(len); 
fread(buf,len,1,fp); /
fclose(fp);
return buf;
}   

最佳答案

您的文件包含被解释为字符串结尾的零字符。您不能将 sprintf 用于二进制数据。

关于使用 Http Post 的 C Wininet 文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10097216/

相关文章:

c++ - 如何知道自己在windows下是否有管理员权限?

c++ - RichEditControl 未调用 ON_EN_CHANGE 事件/处理程序

windows - 为 WININET HTTP 请求使用特定的网络接口(interface)

c++ - sscanf 和 fprintf 不一致?

c - 如何给ListView添加一个蓝色的选择矩形?

c - 如何在 CTRL-C 之前保持输入

Delphi - 文件大小按 URL - 错误 12150

c++ - URLDownloadToFile 总是返回 S_OK

c - 快速启动 fdsink : first 5 MB async, 以下字节同步

c - Wireshark 解剖器 : How to Identify Missing UDP Frames?