如何以编程方式从Web下载文件?

ytr*_*trp 3 c sockets http file download

如何从C等编程语言的服务器下载文件?我理解更高级语言有魔术函数,如"download_file_from_url()",但它们无法帮助我理解实际发生的事情.我对套接字有点熟悉,但网络编程一般对我来说仍然是一个黑盒子.谢谢你的帮助.

T.J*_*der 12

基本上,在低级别,程序打开一个套接字到服务器上的端口80(通常),并向它发送一个如下所示的请求:

GET /index.html HTTP/1.1
Host: stackoverflow.com
Run Code Online (Sandbox Code Playgroud)

......后面跟一个空行.

然后,服务器响应数据,该数据通常由几个标题行,空行和请求的资源组成.使用HTTP 1.1,默认设置是为后续请求保持连接活动(尽管服务器可以在它喜欢时终止它); 如果我使用HTTP 1.0或添加了Connection: close标头,服务器将在发送资源后中断连接.

有关详细信息,请查看有关HTTP维基百科文章,或者如果您真的想参与其中,请查看规范(此处为一体化页面).如果你有telnet(并且你可能),你可以看到自己的样子.只需键入telnet stackoverflow.com 80然后键入上面的行.记得在空白行上按Enter键.

希望重塑这个轮子.实际上,所有语言和环境都有一个库可以帮助您处理所有复杂问题.(例如,尝试上面的示例,www.stackoverflow.com而不是stackoverflow.com在两个地方 - 你得到一个"永久移动"的响应,因为SO团队希望SO在stackoverflow.com,而不是www.stackoverflow.com.还有"暂时移动"响应等等. )


Han*_*Gay 9

您应该检查libcurl- 它是开源的,因此您可以深入了解它,看看受尊重的库如何解决问题.