2013-04-30 3 views
1

J'ai récemment écrit un programme en Python (Windows 64-bit v3.3.1), et j'essaie de le porter à D. Le problème que j'ai rencontré est que j'utilise le module urllib en Python, en particulier, urllib.request.Request et urllib.request.urlopen, et je n'ai pas pu trouver un équivalent en D.Portage Python à D: urllib

Est-ce que D a une bibliothèque qui sert un but similaire? Si non, comment puis-je obtenir la même fonctionnalité? (Tout ce que je dois faire est de télécharger un fichier .csv, puis l'analyser dans un tableau de dictionnaires.)

EDIT: J'ai d'abord essayé la suggestion d'Idan d'importer std.net.curl, mais j'ai rencontré des problèmes. J'ai eu un problème avec le lien libcurl au début, mais ensuite j'ai réussi à le construire et le mettre dans mon dossier lib, qui s'est débarrassé de cette erreur. Puis j'ai eu quelques erreurs .dll, et après avoir placé les fichiers .dll appropriés dans ce que (je pensais) étaient les répertoires appropriés, j'ai toujours eu une erreur: "L'entrée de procédure EVP_md2 n'a pas pu être localisée dans la bibliothèque de liens dynamiques C : \ WINDOWS \ SYSTEM32 \ libssl32.dll. ". Notez que libss3l2.dll était l'un des fichiers .dll que j'avais à télécharger. En outre, toutes ces erreurs (à l'exception des erreurs de liaison `libcurl ') se sont produites pendant l'exécution, dès que le programme a été lancé, de sorte qu'il a réussi à bien se construire.

+0

Vous pouvez configurer manuellement la requête http minimaliste et forcer le codage de réponse dans quelque chose que vous pouvez gérer –

Répondre

1

Vous devez utiliser std.net.curl - http://dlang.org/phobos/std_net_curl.html

Notez que vous devez créer un lien vers libcurl afin de l'utiliser. Vous pouvez le télécharger à partir http://curl.haxx.se/download.html - chercher « Win32 - Générique »

+0

J'ai essayé ceci. J'ai d'abord eu un problème avec 'libcurl ', mais j'ai ensuite réussi à le construire et à le mettre dans mon dossier' lib', ce qui m'a permis de me débarrasser de cette erreur. Puis j'ai eu quelques erreurs .dll, et après avoir placé les fichiers .dll appropriés dans ce que (je pensais) étaient les répertoires appropriés, j'ai toujours eu une erreur: "L'entrée de procédure EVP_md2 n'a pas pu être localisée dans la bibliothèque de liens dynamiques C : \ WINDOWS \ SYSTEM32 \ libss32.dll. ". Notez que 'libss32.dll' était l'un des fichiers .dll que j'avais à télécharger. –

+0

Je pense que je vais ajouter cette information supplémentaire à la question d'origine afin qu'il soit plus facile à trouver. –

+0

J'ai réussi à l'exécuter sur ma boîte de travail Windows avec juste 'libcurl.dll'. Mettez-le dans le répertoire de votre projet, et liez-le via 'pragma (lib," curl ");' –

2

Ok, donc je ne sais pas ce que je fait de mal au début, mais je liquidée la suppression du curl.lib je produisais la première fois et toutes les copies de libssl32.dll . La copie de libcurl que j'ai téléchargé autour de ce temps peut être obtenue here. (J'oublie quelle version j'ai téléchargé la première fois, mais je pense que mes problèmes pourraient simplement être le résultat de me faire la mauvaise version la première fois.)

Ensuite, je `construit curl.lib » en utilisant

libimp.exe /s curl.lib libcurl.dll 

(libimp est un utilitaire de D qui peut être trouvé here.), et de mettre en curl.libDMD\windows\lib\.

Enfin, j'ai copié tous les fichiers .dll à la racine du téléchargement de libccurl et les ai placés dans le dossier avec l'exécutable que j'essayais de construire. J'ai ensuite reconstruit le projet et tout s'est bien passé.

+1

Merci! cette réponse a été très utile –