2011-12-30 25 views
6

Estoy tratando de recuperar un contenido de documento HTTP con MS XMLHTTP COM. Copié el siguiente código de ejemplo pero incluso esto no funciona y falla con EOLEException error 'Acceso denegado' en la llamada al método de envío.XMLHTTP y error "Acceso denegado"

uses 
    MSXML, ComObj, ActiveX; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    httpDoc: XMLHTTP; // IXMLHTTPRequest 
begin 
    httpDoc := CreateOleObject('MSXML2.XMLHTTP') as XMLHTTP; 
    try 
    httpDoc.open('GET', 'http://www.google.com/index.html', False, EmptyParam, EmptyParam); 
    httpDoc.send(''); // <-- EOLEException 'Access is denied' 
    if (httpDoc.readyState = 4) and (httpDoc.status = 200) then 
     ShowMessage(httpDoc.responseText); 
    finally 
    httpDoc := nil; 
    end; 
end; 

Realmente no sé qué estoy haciendo mal :(

+0

también comprobar si 'send' se permite realmente vacía parámetro de cadena en lugar de canónico 'nulo' – OnTheFly

Respuesta

5

Google hace cambios de dirección basados ​​en la localización, ya veces eso implica volver a dirigir a otro dominio. XMLHTTP no lo hace así. Además, parece XMLHTTP no permite el acceso a servidores remotos cuando se ejecuta desde un script local (como el de la VB, Delphi, etc) fuera de un navegador. Ver this discussion, this discussion y this documentation.

+0

Marcado como una respuesta. Aunque tengo que culpar a los desarrolladores de MSXML, ya que no ofrecen manejo de casos de redireccionamiento de dominio x, el programador se ve obligado a inventar algunas soluciones. Sin mencionar los mensajes de error oscuros/no descriptivos. –

+0

Si lees los artículos a los que he vinculado, dicen que puedes usar el objeto 'ServerXMLHTTP' (http://msdn.microsoft.com/en-us/library/windows/desktop/ms762278.aspx) para lograr lo que eres intentando. También eche un vistazo al objeto 'XDomainRequest' (http://msdn.microsoft.com/en-us/library/dd573303.aspx). –