2011-12-30 1 views
6

Я пытаюсь получить содержимое HTTP-документа с помощью MS XMLHTTP COM. Я скопировал следующий пример кода, но даже это не работает и не работает с Ошибка EOLEException «Доступ запрещен» при вызове метода отправки.Ошибка XMLHTTP и ошибки «Access denied»

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; 

Я действительно не знаю, что я делаю не так :(

+0

Также проверьте, если 'send' действительно позволяют пустым string вместо канонического 'null' – OnTheFly

ответ

5

Google делает на основе определения местоположения переназначения, а иногда, что предполагает перенаправление на другой домен. XMLHTTP не так. Кроме того, кажется, XMLHTTP не позволяет получать доступ к удаленным серверам при работе с локального сценария (например, из VB, Delphi и т.д.) вне браузера. См this discussion, this discussion и this documentation.

+0

Отмечено как ответ. Хотя я должен обвинять разработчиков MSXML, поскольку они не предлагают обработку случаев переадресации x-домена, поэтому программист вынужден изобретать некоторые обходные пути. Не говоря уже о неясных/не описательных сообщениях об ошибках. –

+0

Если вы читаете статьи, с которыми я связан, они говорят, что вы можете использовать объект ServerXMLHTTP (http://msdn.microsoft.com/en-us/library/windows/desktop/ms762278.aspx), чтобы выполнить то, что вы попытки. Также посмотрите объект 'XDomainRequest' (http://msdn.microsoft.com/en-us/library/dd573303.aspx). –

 Смежные вопросы

  • Нет связанных вопросов^_^