2013-04-30 182 views
1

我最近在Python中编写了一个程序(Windows 64位v3.3.1),并试图将它移植到D.我碰到的问题是我利用了urllib模块在Python中,特别是urllib.request.Requesturllib.request.urlopen,并且我还没有能够在D中找到等价物。将Python移植到D:urllib

D是否具有用于类似目的的库?如果不是,我该如何去实现相同的功能? (我所需要做的就是下载一个.csv文件,然后将其解析为一个字典数组。)

编辑:我最初试图Idan的建议导入std.net.curl,但我遇到了问题。起初,我有一个链接libcurl的问题,但后来我设法将它构建并放在我的lib文件夹中,从而消除了该错误。然后,我得到了一些.dll错误,并且在将合适的.dll文件放在什么(我认为)是合适的目录后,仍然出现错误:“EVP_md2过程条目无法位于动态链接库C中:\ WINDOWS \ SYSTEM32 \ libssl32.dll“。请注意,libss3l2.dll是我必须下载的.dll文件之一。此外,所有这些错误(除了`libcurl'链接错误)在运行时发生,一旦程序启动,所以它确实设法实际构建得很好。

+0

你可以手动设置最简约的http请求,并强制响应编码到你可以处理的东西 – 2013-04-30 13:31:50

回答

1

您需要使用std.net.curl - http://dlang.org/phobos/std_net_curl.html

请注意,你需要为了使用它链接到libcurl。您可以从http://curl.haxx.se/download.html下载 - 找“的Win32 - 通用”

+0

我试过这个。起初我有一个'libcurl'的问题,但是后来我设法将它构建并放在我的'lib'文件夹中,从而摆脱了那个错误。然后,我得到了一些.dll错误,并且在将合适的.dll文件放在什么(我认为)是合适的目录后,仍然出现错误:“EVP_md2过程条目无法位于动态链接库C中:\ WINDOWS \ SYSTEM32 \ libss32.dll“。请注意,'libss32.dll'是我必须下载的.dll文件之一。 – 2013-04-30 14:20:22

+0

我想我会将这些额外的信息添加到原始问题中,以便更容易找到。 – 2013-04-30 14:21:00

+0

我设法只用'libcurl.dll'在我的工作Windows盒子上运行它。把它放在你项目的目录中,并通过'pragma(lib,“curl”)链接它;' – 2013-04-30 14:40:08

2

好了,所以我不知道我做错了什么开始,但我结束了删除curl.lib我周围产生的第一时间和libssl32.dll所有副本。我随时随地下载了libcurl的副本,可以获得here。 (我忘了是什么版本我下载的是第一次,但我想我的问题可能只是我身边得到错误的版本第一次的结果。)

然后,我建`curl.lib”使用

libimp.exe /s curl.lib libcurl.dll 

libimp是用于D的实用程序,可以找到here。),并将curl.lib代入DMD\windows\lib\

最后,我复制了libccurl下载根目录下的所有.dll文件,并将它们放入了我正在尝试构建的可执行文件的文件夹中。然后我再次构建了这个项目,它运行得很好。

+1

谢谢!这个答案非常有帮助 – 2013-11-03 22:51:46