[英]This python code in C/C++
我有這個代碼:
#!/usr/bin/python
import urllib
print 'Insert page to download:'
page = raw_input()
filehandle = urllib.urlopen(page)
myFile = open('file.html','w')
for lines in filehandle.readlines():
myFile.write(lines )
myFile.close()
filehandle.close()
這基本上只是下載輸入的網頁並將其寫入文件.html。
我想知道如何使用 C/C++ 做到這一點。 如果有辦法但它不像 python 那樣直接,我可以做些什么或搜索以獲得類似的結果?
另外,我知道套接字編程的存在,但我對它還不是很好,我只是在尋找一個快速而骯臟的解決方案。
謝謝你。
試試libcurl庫,它為 C(以及包括 C++ 在內的許多其他語言)提供 URL 下載功能。
如果您正在為 Windows 編寫代碼,您還可以使用Windows Internet庫。
快速而骯臟的答案是從 C++ 代碼中使用 python 代碼和 shell 代碼,或嵌入 Z23EEEB4347BDD256DZ 代碼和運行代碼 ...
無論如何,您想要的是用於 C/C++ 的 http 客戶端庫。 我有使用 C 的libcurl的經驗,它和那種事情一樣令人愉快!
我第二個 libcurl,這是我通常用於我的快速和骯臟的解決方案。
通常,當您在桌面環境(如 GNOME 和 KDE)中編程時,您可以使用該環境中的功能,這些功能可在 GUI 中使用,並且更易於與文件選擇器 window、進度條等一起使用。c。
如果你為 GNOME 環境編程(或安裝了 GNOME 庫),那么這個程序幾乎和你的 Python 程序做同樣的事情,除了它不轉換行尾字符,它逐字復制 CR 和 LF,並且它使用程序 arguments 而不是提示用戶輸入。 哦,它沒有給出錯誤信息,它只是退出,沒有任何線索說明原因。 但它確實有一個優點,它可以在 gnome 可以處理的任何兩個文件之間進行復制,無論是本地文件還是遠程文件系統中的文件,並且您可以使用沒有路徑的文件名或使用 ~ 作為您的主目錄。
/*
File: mycopy.c
Compile with: gcc -Wall -g -c mycopy.c `pkg-config --cflags gio-2.0`
Link with: gcc -Wall -g mycopy.o -o mycopy `pkg-config --libs gio-2.0`
See: http://stackoverflow.com/questions/6726499/this-python-code-in-c-c
*/
#include <glib-object.h>
#include <gio/gio.h>
#include <stdlib.h>
int main( int argc, char*argv[])
{ GFile *source, *dest;
gboolean success;
if( argc!=3 )
exit( 2 );
g_type_init();
source = g_file_new_for_commandline_arg( argv[1] );
dest = g_file_new_for_commandline_arg( argv[2] );
success = g_file_copy( source, dest, 0, 0, 0, 0, 0 );
if( !success )
exit( 2 );
exit( 0 );
}
如果您想在 Linux 中真正快速地從網頁復制,則將目錄(又名“web 站點”)安裝到文件系統中,並在代碼中使用 splice(參見man 2 splice
)來傳輸數據。 我最近沒有檢查過這個,但是我上次檢查時大多數現成的庫都沒有這樣做。 You can also (preferably?) do this with the shell commands mount
and cp
(last time I benchmarked, this was faster then C code using libcurl, or the curl or wget shell commands, for any large-ish file).
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.