如何修复使用MS2XML.XMLHTTP请求的PDF文件中的损坏?

如何修复使用MS2XML.XMLHTTP请求的PDF文件中的损坏?,pdf,download,httprequest,buffer,visual-foxpro,Pdf,Download,Httprequest,Buffer,Visual Foxpro,朋友们,这是我在这里的第一个问题。。。在使用MS2XML.XMLHTTP下载PDF缓冲区时,我遇到了一些问题。我一直在使用Genexus这样做,但我也尝试了纯视觉福克斯专业版。问题是,当我将ResponseText发送到字符串变量时,一些字符被问号替换,sam发生在我将ResponseText发送到pdf或txt文件时。在MS2XML.XMLHTTP.6.0中创建的对象不允许使用ResponseBy属性。关于如何使用MS2XML.XMLHTTP解决这个问题,有什么想法吗?谢谢 oHTTP = C

朋友们,这是我在这里的第一个问题。。。在使用MS2XML.XMLHTTP下载PDF缓冲区时,我遇到了一些问题。我一直在使用Genexus这样做,但我也尝试了纯视觉福克斯专业版。问题是,当我将ResponseText发送到字符串变量时,一些字符被问号替换,sam发生在我将ResponseText发送到pdf或txt文件时。在MS2XML.XMLHTTP.6.0中创建的对象不允许使用ResponseBy属性。关于如何使用MS2XML.XMLHTTP解决这个问题,有什么想法吗?谢谢

oHTTP = CreateObject("MSXML2.XMLHTTP.6.0")  
oHTTP.Open("GET", 'https://homologacao.plugboleto.com.br/api/v1/boletos/impressa  /lote/NIKLfYBWz',.F.)
oHTTP.setRequestHeader("content-type", "application/pdf")
oHTTP.Send()
? oHTTP.responseText
我收到了如下类似的邮件(满是问号):

%PDF-1.4%?2 0 obj流?JFIF H?C        !“$”$?“????}!1A  Qa”第2季度?#B?R?$3br?%&”()456789:CDEFGHIJSTUVWXYZDEFGHIJSTUVWXYZ???????????????????????????????????????????????????? ??? W“2?B 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10问问问问问问问问问问问干干干干干干干干干干干干干干干干干干干干干干干问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问问jlm?Tn?u?Ey?PA?3?E?J?F?y,s?i?m=kw????vR@G美元?“BSu”将在未来几几几年的时间内开展的这些活动中,在未来几几年的时间内,在这些年的时间内,在这些年的时间内,在这些年的时间内,在这些年的时间内,BSu将将在这些年的时间内,在这些年的时间内,在这些年的时间内,在这些年的时间内,在这些年的时间内,在在这些地区的时间内,他们是是在在在在这些地区的时间内,在在在这些地区的时间内,在在在这些地区的时间上是是作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为作为r8.9Va、c、Zv、x+b、wd、F、8a、6、x、9、8、15M“?:K?T?1?Gw({c?)?p?rB?g?M?QG*?PC?o?v?'n[!n2?}g?r?g?;J?r?aI?S?q?d;??M?y?lCp?[B(=L?g]2)??”???
?8???9L???y)?B??t因为PDF是二进制文件而不是文本文件,所以您会看到?和其他各种不可打印的字符,这是很正常的。相反,请将其保存到磁盘上的文件中,并使用类似ShellExecute的内容打开。即:

oHTTP = CreateObject("MSXML2.XMLHTTP.6.0")  
oHTTP.Open("GET", 'https://homologacao.plugboleto.com.br/api/v1/boletos/impressa  /lote/NIKLfYBWz',.F.)
oHTTP.setRequestHeader("content-type", "application/pdf")
oHTTP.Send()

Local lcFileName
lcFileName = Forcepath(Sys(2015)+'.pdf', Sys(2023))
Strtofile(oHttp.responseText, m.lcFileName)

Declare Long ShellExecute In "shell32.dll" ;
    long HWnd, String lpszOp, ;
    string lpszFile, String lpszParams, ;
    string lpszDir, Long nShowCmd

ShellExecute(_vfp.HWnd,'',m.lcFileName,'','',1)
编辑:这不是一个作业MSXML2.XmlHttp。您只需下载PDF格式的文件并打开它:

Local lcFileName, lcRemote
lcRemote = 'https://homologacao.plugboleto.com.br/api/v1/boletos/impressao/lote/NIKLfYBWz'

lcFileName = Forcepath(Sys(2015)+'.pdf', Sys(2023))

If (getFileFromURL(m.lcRemote, m.lcFileName) = 0)
    Declare Long ShellExecute In "shell32.dll" ;
        long HWnd, String lpszOp, ;
        string lpszFile, String lpszParams, ;
        string lpszDir, Long nShowCmd

    ShellExecute(_vfp.HWnd,'',m.lcFileName,'','',1) 
Endif

Procedure getFileFromURL
    Lparameters tcRemoteFile,tcLocalFile
    Declare Integer URLDownloadToFile In urlmon.Dll;
        INTEGER pCaller, String szURL, String szFileName,;
        INTEGER dwReserved, Integer lpfnCB
    Return URLDownloadToFile(0, m.tcRemoteFile, m.tcLocalFile, 0, 0)
endproc

由于PDF是二进制文件而不是文本文件,因此您会看到?和其他各种不可打印的字符,这是很正常的。请将其保存到磁盘上的文件中,并使用类似ShellExecute的内容打开。即:

oHTTP = CreateObject("MSXML2.XMLHTTP.6.0")  
oHTTP.Open("GET", 'https://homologacao.plugboleto.com.br/api/v1/boletos/impressa  /lote/NIKLfYBWz',.F.)
oHTTP.setRequestHeader("content-type", "application/pdf")
oHTTP.Send()

Local lcFileName
lcFileName = Forcepath(Sys(2015)+'.pdf', Sys(2023))
Strtofile(oHttp.responseText, m.lcFileName)

Declare Long ShellExecute In "shell32.dll" ;
    long HWnd, String lpszOp, ;
    string lpszFile, String lpszParams, ;
    string lpszDir, Long nShowCmd

ShellExecute(_vfp.HWnd,'',m.lcFileName,'','',1)
编辑:这不是一个作业MSXML2.XmlHttp。您只需下载PDF格式的文件并打开它:

Local lcFileName, lcRemote
lcRemote = 'https://homologacao.plugboleto.com.br/api/v1/boletos/impressao/lote/NIKLfYBWz'

lcFileName = Forcepath(Sys(2015)+'.pdf', Sys(2023))

If (getFileFromURL(m.lcRemote, m.lcFileName) = 0)
    Declare Long ShellExecute In "shell32.dll" ;
        long HWnd, String lpszOp, ;
        string lpszFile, String lpszParams, ;
        string lpszDir, Long nShowCmd

    ShellExecute(_vfp.HWnd,'',m.lcFileName,'','',1) 
Endif

Procedure getFileFromURL
    Lparameters tcRemoteFile,tcLocalFile
    Declare Integer URLDownloadToFile In urlmon.Dll;
        INTEGER pCaller, String szURL, String szFileName,;
        INTEGER dwReserved, Integer lpfnCB
    Return URLDownloadToFile(0, m.tcRemoteFile, m.tcLocalFile, 0, 0)
endproc

PDF是一个二进制文件,不是文本文件。使用say ShellExecute保存并打开。PDF是一个二进制文件,不是文本文件。使用say ShellExecute保存并打开。@Cetin感谢您的回答…无法运行该ShellExecute,它返回“OLE错误代码0x80020006:未知名称”…无论如何,我使用了Genexus函数Shell'我认为它做了同样的事情,但仍然不起作用,文件仍然损坏。有什么想法吗?@viniciusmattos,这是你的想法。如果服务真的返回一些PDF文件,代码对我有效。你的链接是错误的,因此不可测试。这是正确的链接:()你认为你可以对这个链接进行测试吗?非常感谢!@viniciusmattos,现在这是有意义的。你从一开始就用你的MSXML2代码向我们指出了一个错误的方向。这不是MSXML的工作,只是从URL下载文件。请参阅编辑过的示例。非常感谢。我不知道MSXML不是正确的选项。你的代码按照很好,问题解决了。再次感谢!@Cetin感谢您的回答…无法运行ShellExecute,它返回“OLE错误代码0x80020006:未知名称”…无论如何,我使用了Genexus函数“Shell”我认为它做了同样的事情,但仍然不起作用,文件仍然损坏。有什么想法吗?@viniciusmattos,这是你的想法。代码对我有用,前提是服务确实返回了一些PDF文件。你的链接是错误的,因此不可测试。这是正确的链接:()你认为你可以对这个链接进行测试吗?非常感谢!@viniciusmattos,现在这是有意义的。你从一开始就用你的MSXML2代码向我们指出了一个错误的方向。这不是MSXML的工作,只是从URL下载文件。请参阅编辑过的示例。非常感谢。我不知道MSXML不是正确的选项。你的代码按照很好,问题解决了。再次感谢!