MSXMLでStatusを正しく取得するには?


KENZO  2007-06-16 00:54:07  No: 98983

下記コードにてcXMLサーバーへXMLデータをPOSTして、
構文に不備があった場合にエラーコードが取得できません。

Set HttpRequest = CreateObject("MSXML2.ServerXMLHTTP.6.0")

HttpRequest.Open "POST", l_URL, False
HttpRequest.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
HttpRequest.send (m_buf & m_buf2 & m_buf3)
    
HttpRequest.responseTextには下記のようにエラー表示されているのですが、
HttpRequest.statusには200がセットされてきます。

  <Response>
    <Status code="400" text="Error creating order request object.&#xa;Root cause: Unable to parse date string '---23:50:00+09:00'. Error is: Unparseable date: &quot;---23:50:00+09:00&quot;"/>
    <PunchOutSetupResponse>
      <StartPage>
        <URL/>
      </StartPage>
    </PunchOutSetupResponse>
  </Response>

このStatus code="400"を取得する方法は無い物でしょうか?


魔界の仮面弁士  2007-06-16 02:22:40  No: 98984

もしかしたら、エラーの有無に関わらず、常に HTTP Status Code として、200 を出力する仕様なのでは?

だとすれば、responseXML から目的のノードを辿ることで、400 というコードを得られると思いますよ。


KENZO  2007-06-16 03:31:15  No: 98985

魔界の仮面弁士さん
早々のアドバイスありがとうございます。
>常に HTTP Status Code として、200 を出力する仕様なのでは?
そのような仕様のサーバーも存在するんですね。

>responseXML から目的のノードを辿ることで
HttpRequest.responseXMLでレスポンスを受けて、
XMLデータとして処理を行い「Status code="400"」の部分を取り出すと言うことでしょうか?
XMLを扱うのは初めてですので、勘違いをしていたらすいません。


魔界の仮面弁士  2007-06-16 05:58:01  No: 98986

> そのような仕様のサーバーも存在するんですね。
そのサーバが、実際にそのような仕様なのかどうかは、私には分かりません。
実際に何を返しているのかは、KENZO 自身がテストして確認してみてください。

> XMLデータとして処理を行い「Status code="400"」の部分を取り出すと言うことでしょうか?
ですます。見た感じ、本文部が XML 構文になっているようでしたのでね。

responseXML がパースエラーになっていないのであれば、
  s = .SelectSingleNode("/Response/Status/@code").nodeValue
で、"400" を得られるかも知れません。

もし、パースエラーになるなら…… responseText を自力解析の方向で。


KENZO  2007-06-16 06:27:59  No: 98987

魔界の仮面弁士さん、こんばんは。
コード400と500が発生した場合でもStatusは200が帰ってきました。

>もし、パースエラーになるなら…… responseText を自力解析の方向で。
一応responseTextからステータスコードを取り出す関数は作りましたが、
なんとかコードを取り出せるようにもう少しあがいてみます。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加