前提・実現したいこと
C++で、Web-APIにリクエストを行い、XMLを取得するコードを書いています。
テストしたところ、たまに例外が発生しますので、解決策を教えてください。
発生している問題・エラーメッセージ
下記コードhr = pHttp->send();を実行した際に、例外が発生し、 Unknown Error 0x80072EE7というメッセージが出ることがあります。 このURLにしたら必ず出るというものではなく、突然発生します。 1回目よりも何回か連続でリクエストをするとなりやすいです。 例外が発生した後、再度同じリクエストをすると成功します。
該当のソースコード
c++
1//関数を呼び出す前 2 CoInitialize(NULL); 3 4//以下、関数の内容 5 MSXML2::IXMLDOMDocumentPtr pDoc; 6 MSXML2::IServerXMLHTTPRequestPtr pHttp; 7 CString req;//リクエストURL 8/* 9この間に、リクエストURL作成し、reqに代入する。 10*/ 11 12 13 BOOL wj = FALSE; 14 try{ 15 // HTTPRequestに対するCreateInstance 16 hr = pHttp.CreateInstance(__uuidof(ServerXMLHTTP40)); 17 if( FAILED(hr) ){ 18 pDoc = NULL; 19 20 return -1; 21 } 22 23 VARIANT vAsync; 24 vAsync.vt = VT_BOOL; 25 vAsync.boolVal = FALSE; 26 27 // HTTPリクエストの作成 28 pHttp->open(L"GET", _bstr_t(req), vAsync); 29 30 wj = TRUE; 31 // Webサーバーへのリクエスト送信 32 /*このsend関数を呼び出した際に例外発生します。*/ 33 hr = pHttp->send(); 34 if( FAILED(hr) ){ 35 pDoc = NULL; 36 pHttp->abort(); 37 return -1; 38 } 39 // サーバーからの応答 40 st = pHttp->status; 41 if( st != 200 ){ 42 pDoc = NULL; 43 pHttp->abort(); 44 return -1; 45 } 46 47 wj = FALSE; 48 49 // 初期処理 50 //XmlIniz(pDoc); 51 hr = ::CoCreateInstance(__uuidof(DOMDocument40), NULL, CLSCTX_INPROC_SERVER, MSXML2::IID_IXMLDOMDocument, (VOID **)&pDoc); 52 if( hr == S_OK ){ 53 pDoc->put_async(VARIANT_FALSE); 54 pDoc->put_validateOnParse(VARIANT_FALSE); 55 pDoc->put_resolveExternals(VARIANT_FALSE); 56 }else{ 57 pDoc=NULL; 58 pHttp->abort(); 59 return -1; 60 } 61 // レスポンスデータの取得 62 pDoc = pHttp->responseXML; 63 if( FAILED(pDoc) ){ 64 pDoc = NULL; 65 pHttp->abort(); 66 return -1; 67 } 68 }catch(_com_error &e){ 69 pDoc = NULL; 70 pHttp->abort(); 71 CString em = (LPCTSTR)e.Description().GetBSTR(); 72 if (em.IsEmpty()) 73 em = e.ErrorMessage(); 74/*ここで出てくるemの中身をチェックするとUnknown Error */ 75 int fin = (wj == TRUE) ? -10 : -1; 76 return fin; 77 } 78 79 pHttp->abort(); 80/*ここで、取得されたXMLの解析作業*/ 81 pDoc=NULL; 82 return 0; 83 84//関数はここまで 85//関数を抜けた後 86 CoUninitialize(); 87
試したこと
IServerXMLHTTPRequestPtrをIXMLHTTPRequestPtrに、tryのすぐ下の行を
hr = pHttp.CreateInstance(__uuidof(ServerXMLHTTP40));
から
hr = pHttp.CreateInstance(__uuidof(XMLHTTP40));
に変更したところ、同じところで例外が発生し、指定されたリソースが見つかりません
というエラーメッセージが出ました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/05/14 05:12
退会済みユーザー
2020/05/15 00:13
退会済みユーザー
2020/05/15 01:17