J'utilise le module std.net.curl
pour obtenir du HTML à partir d'une page Web supprimée. Mais j'ai quelques problèmes avec l'encodage, que je n'ai aucune idée de comment réparer. Certaines pages, comme facebook.com
je reçois les messages d'erreur suivants (temps exécuter):Séquence de codage non valide pour l'encodage 'utf-8'
[email protected]/usr/include/d/dmd/phobos/std/net/curl.d(800): Invalid encoding sequence for enconding 'utf-8'
----------------
./foo(char[] std.net.curl._decodeContent!(char)._decodeContent(ubyte[], immutable(char)[])+0xf6) [0x812e6ba]
./foo(char[] std.net.curl._basicHTTP!(char)._basicHTTP(const(char)[], const(void)[], std.net.curl.HTTP)+0x28e) [0x80f89f6]
./foo(char[] std.net.curl.get!(std.net.curl.HTTP, char).get(const(char)[], std.net.curl.HTTP)+0x8f) [0x80f8737]
./foo(immutable(char)[] teste.get_html(immutable(char)[])+0x112) [0x80f0806]
./foo(_Dmain+0x5f) [0x80f06e3]
./foo(extern (C) int rt.dmain2.main(int, char**).void runMain()+0x14) [0x8138340]
./foo(extern (C) int rt.dmain2.main(int, char**).void tryExec(scope void delegate())+0x18) [0x8137e50]
./foo(extern (C) int rt.dmain2.main(int, char**).void runAll()+0x32) [0x8138382]
./foo(extern (C) int rt.dmain2.main(int, char**).void tryExec(scope void delegate())+0x18) [0x8137e50]
./foo(main+0x94) [0x8137e04]
/lib/libc.so.6(__libc_start_main+0xf3) [0xb7593003]
Pour google.com
, je suis (que je reçois binaire comment?)
�S��7�砱�y�����g�d��C���|��W��O�s��~����*6��@�4�&�A�J����r▒4=�FT�e�� [...]
Pour dlang.org
il fonctionne très bien.
La question est: Quelle est la bonne façon de le lire? indépendant de l'encodage de la page.
Voici mon code D:
string get_html(string page) {
auto client = HTTP();
client.clearRequestHeaders();
client.addRequestHeader("DNA", "1");
client.addRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
client.addRequestHeader("Accept-Encoding", "gzip, deflate");
client.addRequestHeader("User-Agent", "Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1");
client.addRequestHeader("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
return cast(string)get(page, client);
}
Merci à l'avance.
Quelles sont ces fonctions? appelez seulement 'get (page)' au lieu de? – Jack
Oui, [get] (http://dlang.org/phobos/std_net_curl.html#get), avec UFCS c'est: 'url.get()', ce qui semble plutôt cool, imo. – dav1d
Mais j'ai vraiment besoin d'envoyer des en-têtes. Donc, 'get (page, client)' est vraiment nécessaire. Merci pour 'url.get()'. :) – Jack