سؤال

وأنا أحاول الوصول إلى ملف xml عبر HTTP. عنوان مشابه ل:

http://localhost/app/config/file.xml

عند لصق هذا في مستعرض يتم عرض XML كما هو متوقع. في برنامجي أستخدمه:

MSXML2::IXMLHTTPRequestPtr rp;
...
rp->open( "GET" , "http://localhost/app/config/file.xml" );

ووالحصول على الاستجابة التالية:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"     
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>IIS 7.0 Detailed Error - 400.0 - Bad Request</title> 
<style type="text/css"> 
<!

هل لديها أي أفكار ما يمكن أن يحدث؟

وتحرير: مزيد من المعلومات، عند محاولة الاتصال إلى ملقم آخر في المكتب (الذي يمكنني الاتصال غرامة باستخدام مستعرض) أنا الحصول على رد من "طلب غير صالح" وليس أكثر.

وظيفة جعل المكالمة:

#import "msxml3.dll"

BOOL HTTPGet(LPCTSTR URL, CString &Response, long Timeout, BOOL ForceNoCache )
{
BOOL ret = FALSE;

MSXML2::IXMLHTTPRequestPtr rp;
//MSXML2::IServerXMLHTTPRequestPtr rp;

try
{
    HRESULT hr = rp.CreateInstance( __uuidof( MSXML2::XMLHTTP ) );
    //HRESULT hr = rp.CreateInstance( __uuidof( MSXML2::ServerXMLHTTP30 ) );

    if( SUCCEEDED( hr ) )
    {
        rp->open( "GET" , URL );
        if( ForceNoCache )
            rp->setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 1970 00:00:00 GMT" );
        rp->send();

        for( DWORD tc = GetTickCount() ; rp->readyState != 4 && GetTickCount() < tc + Timeout ; )
        {
            Sleep( 50 );
            //WaitMessage();
            for( MSG msg ; PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) ; )
            {
                TranslateMessage( &msg );
                DispatchMessage( &msg );
            }

        }

        if( rp->readyState == 4 )
        {
            Response = (LPCSTR)rp->responseText;
            ret = TRUE;
        }
        else
            Response = "Timed out";
    }
}
catch( CException &e )
{
    char err[ 2048 ];
    if( e.GetErrorMessage( err , sizeof( err ) ) )
        Response = err;
    else
        Response = "Unhandled exception";
}
catch( _com_error &e )
{
    Response = e.ErrorMessage();
}
catch( ... )
{
    Response = "Unhandled exception";
}

return ret;
}

وEDIT2: وتعمل وظيفة بشكل صحيح عندما وضعت ForceNocache إلى false جعل إذا-التعديل-منذ رأس المشكلة ... سأبدأ تصل سؤال جديد إذا لم أتمكن من معرفة سبب هذا غير محبوب (بواسطة IIS 7)، ولكن إذا شخص ما هنا يمكن لي نقطة في الاتجاه الصحيح أنه سيوفر بعض الضوضاء.

وشكرا لمساعدتكم جميعا.

هل كانت مفيدة؟

المحلول

وأعتقد أنني وجدت الجواب، لديك لبادئة موعد مع 0.

مدعوم مع إذا المعدلة منذ ذلك الحين، خادم عوائد "400 طلب غير صحيح"

نصائح أخرى

ووفقا لهذا مقالة قاعدة معارف Microsoft التي قد تكون تواجه نوعا من الفساد حزمة:

<اقتباس فقرة>   

رسالة خطأ: HTTP / 1.1 خطأ 400 - طلب غير صحيح (KB247249)

وفقط من باب المصلحة، هل واجهت نفس عند استخدام IServerXMLHTTPRequestPtr؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top