使用FoxPro下载文件(HTTP)
今天有人向我寻求有关FoxPro问题的帮助,关于如何通过HTTP下载文件 我发现了两件事:一件是付费ActiveX,另一件是需要libcurl使用FoxPro下载文件(HTTP),foxpro,visual-foxpro,Foxpro,Visual Foxpro,今天有人向我寻求有关FoxPro问题的帮助,关于如何通过HTTP下载文件 我发现了两件事:一件是付费ActiveX,另一件是需要libcurl 有没有一种方法可以做到这一点而不需要任何额外的东西(vfp8),比如Java中的HttpURLConnection?例如,通过使用Microsoft.XMLHTTP查看使用West Wind Web Connect。这是一个允许您编写可从web访问的VFP应用程序的框架。您可以在VFP中编写,但它需要注册Windows DLL以打开连接句柄,并调用以获取
有没有一种方法可以做到这一点而不需要任何额外的东西(vfp8),比如Java中的
HttpURLConnection
?例如,通过使用Microsoft.XMLHTTP查看使用West Wind Web Connect。这是一个允许您编写可从web访问的VFP应用程序的框架。您可以在VFP中编写,但它需要注册Windows DLL以打开连接句柄,并调用以获取数据
另一种选择是使用自动化,例如使用Internet Explorer。您可以从VFP中创建一个ie对象,并调用其方法打开给定的URL,等待“就绪状态”完成,然后查看内容。至于尝试获取需要URL参数字符串的内容,您可以添加这些参数字符串,这没有问题,但如果需要POST变量,则需要付出更多的努力
正如Jerry提到的,西风工具非常强大,Rick Strahl从。。。我记得大约1993年。他的另一个工具是wwIPTools.DLL,它提供了更多的功能。两个代码段可以工作,并且不需要额外的文件/DLL/flls/etc
Local loRequest, lcUrl, lcFilename
lcUrl = "http://example.com/foo.zip"
lcFilename = "C:\Temp\PSV.zip"
loRequest = Createobject('MsXml2.XmlHttp')
loRequest.Open("GET",lcUrl,.F.)
loRequest.Send()
StrToFile(loRequest.ResponseBody,lcFilename)
及
(摘自)你也可以看看Craig Boyd的免费库,他还有一个优秀的免费JSON库。选项1:
Declare Integer URLDownloadToFile In urlmon.dll As _apiURLDownloadToFile;
Integer pCaller, ;
String szURL, ;
String szFileName, ;
Integer dwReserved, ;
Integer lpfnCB
Declare Integer InternetOpen In wininet.dll As _apiInternetOpen ;
String lpszAgent, ;
Integer dwAccessType, ;
String lpszProxy, ;
String lpszProxyBypass, ;
Integer dwFlags
Declare Integer InternetOpenUrl In wininet.dll As _apiInternetOpenUrl ;
Integer hInternet,;
String lpszUrl,;
String lpszHeaders,;
Integer dwHeadersLength,;
Integer dwFlags,;
Integer dwContext
Declare Integer InternetReadFile In wininet.dll As _apiInternetReadFile ;
Integer hFile, ;
String @lpBuffer, ;
Integer dwNumberOfBytesToRead, ;
Integer @lpdwNumberOfBytesRead
Declare Integer InternetCloseHandle In wininet.dll As _apiInternetCloseHandle ;
Integer hInternet
只需让舒尔先从缓存中清除文件:
Declare Integer DeleteUrlCacheEntry In wininet.dll As _apiDeleteUrlCacheEntry ;
String lpszUrlName
或者在url的末尾添加一个随机参数,例如“?somerandomvalue”
选项2:
Declare Integer URLDownloadToFile In urlmon.dll As _apiURLDownloadToFile;
Integer pCaller, ;
String szURL, ;
String szFileName, ;
Integer dwReserved, ;
Integer lpfnCB
Declare Integer InternetOpen In wininet.dll As _apiInternetOpen ;
String lpszAgent, ;
Integer dwAccessType, ;
String lpszProxy, ;
String lpszProxyBypass, ;
Integer dwFlags
Declare Integer InternetOpenUrl In wininet.dll As _apiInternetOpenUrl ;
Integer hInternet,;
String lpszUrl,;
String lpszHeaders,;
Integer dwHeadersLength,;
Integer dwFlags,;
Integer dwContext
Declare Integer InternetReadFile In wininet.dll As _apiInternetReadFile ;
Integer hFile, ;
String @lpBuffer, ;
Integer dwNumberOfBytesToRead, ;
Integer @lpdwNumberOfBytesRead
Declare Integer InternetCloseHandle In wininet.dll As _apiInternetCloseHandle ;
Integer hInternet
这些函数的正确使用可在MSDN上找到
PS:您错过了这一个:是我的
HttpClient.prg
文件(仅支持获取响应):
GET
请求的用法:
Local HttpClient
m.HttpClient = NEWOBJECT("HttpClientRequest","httpclient.prg")
m.HttpClient.Open("GET","http://servername/path/resourcename")
m.HttpClient.Send()
执行上述代码后,服务器响应包含在m.HttpClient.responseBody
属性中,您可以将值存储到文件中,或者例如将图片存储到图像对象的PictureVal
属性中:
STRTOFILE(m.HttpClient.responseBody,"c:\filename");
m.myform.AddObject("myimg",""image")
m.myform.myimg.PictureVal=m.HttpClient.responseBody
这是我在原始问题中粘贴的链接。唉,最新版本不起作用。