2011-12-30 14 views
6

Sto cercando di recuperare un contenuto del documento HTTP con MS XMLHTTP COM. Ho copiato il seguente codice di esempio, ma anche questo non funziona e non riesce con EOLEException errore 'Accesso negato' al metodo di invio chiamata.Errore XMLHTTP e "Accesso negato"

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; 

Io davvero non so cosa sto facendo di sbagliato :(

+0

controlla anche se 'send' è davvero consentire vuota parametro stringa anziché canonico 'null' – OnTheFly

risposta

5

Google fa reindirizzamenti basati sulla localizzazione, e, talvolta, che coinvolge il reindirizzamento a un altro dominio. XMLHTTP non lo fa così. Inoltre, sembra XMLHTTP non consente l'accesso a server remoti quando si esegue da uno script locale (come da VB, Delphi, ecc) al di fuori di un browser. Vedi this discussion, this discussion e this documentation.

+0

Contrassegnato come risposta. Anche se devo incolpare gli sviluppatori di MSXML in quanto non offrono la gestione dei casi di reindirizzamento dei domini x, così il programmatore è costretto a inventare soluzioni alternative. Per non parlare di messaggi di errore oscuri/non descrittivi. –

+0

Se si leggono gli articoli a cui mi sono collegato, si dice che è possibile utilizzare l'oggetto 'ServerXMLHTTP' (http://msdn.microsoft.com/en-us/library/windows/desktop/ms762278.aspx) per ottenere ciò che si è tentare. Dai anche un'occhiata all'oggetto 'XDomainRequest' (http://msdn.microsoft.com/en-us/library/dd573303.aspx). –