c++ | Winsock -写HTTP Post上传文件的正确方法


C++ | Winsock - Correct way to write HTTP Post for uploading a file?

警告我看到一些人问过,但通常是关于CURL的,我问的是通过WinSock2发送。

好吧,所以我知道如何使POST和GET语句很容易,(POST与应用程序/应用程序/x-www-form-urlencoded),但我不确定如何使用多部分/表单数据,我知道它有一些东西与边界指定当你完成发送数据。

但是上传文件的基本HTTP POST应该是什么样子呢?(也可以上传到PHP POSTBACK吗?如果它是application/x-www-form-urlencoded,我可以看到类似filename=hello.png&data=…)

像这样的格式:(这是我所知道的关于发送数据)我在网上找不到一个坚实的例子,所以我问这个问题。

POST /postback.php HTTP/1.1
HOST: www.website.com
Content-Type: multipart/form-data; boundary=----IAmABoundary
Content-Length: 300
------IAmABoundary
Send Binary Data?
------IAmABoundary--

使用fiddler捕获上传文件,然后您可以看到实际格式,我记得上面的示例或多或少是正确的。这里有一个更完整的答案和一个很好的例子:multipart/form-data

示例

HTTP消息是MIME消息。它实际上是一种相当复杂的编码格式。

从阅读RFC 2045开始。这是MIME的基本规范。

然后,转到RFC 2046。RFC 2046的第5节列出了multipart MIME消息的规范,它用于您看到的multipart/form-data格式。

确实有很多材料要通读。但是,为了理解文件上传是如何工作的,完全理解mime格式的消息是必要的。

如果你想发送文件内容实际上你可以把文件内容放在HTTP header后面,并设置内容类型和长度

multipart/form-data被HTML表单用来发布/提交字段中有文件的表单,它们使用multipart边界分隔部分/字段