下記コードにて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.
Root cause: Unable to parse date string '---23:50:00+09:00'. Error is: Unparseable date: "---23:50:00+09:00""/>
<PunchOutSetupResponse>
<StartPage>
<URL/>
</StartPage>
</PunchOutSetupResponse>
</Response>
このStatus code="400"を取得する方法は無い物でしょうか?
もしかしたら、エラーの有無に関わらず、常に HTTP Status Code として、200 を出力する仕様なのでは?
だとすれば、responseXML から目的のノードを辿ることで、400 というコードを得られると思いますよ。
魔界の仮面弁士さん
早々のアドバイスありがとうございます。
>常に HTTP Status Code として、200 を出力する仕様なのでは?
そのような仕様のサーバーも存在するんですね。
>responseXML から目的のノードを辿ることで
HttpRequest.responseXMLでレスポンスを受けて、
XMLデータとして処理を行い「Status code="400"」の部分を取り出すと言うことでしょうか?
XMLを扱うのは初めてですので、勘違いをしていたらすいません。
> そのような仕様のサーバーも存在するんですね。
そのサーバが、実際にそのような仕様なのかどうかは、私には分かりません。
実際に何を返しているのかは、KENZO 自身がテストして確認してみてください。
> XMLデータとして処理を行い「Status code="400"」の部分を取り出すと言うことでしょうか?
ですます。見た感じ、本文部が XML 構文になっているようでしたのでね。
responseXML がパースエラーになっていないのであれば、
s = .SelectSingleNode("/Response/Status/@code").nodeValue
で、"400" を得られるかも知れません。
もし、パースエラーになるなら…… responseText を自力解析の方向で。
魔界の仮面弁士さん、こんばんは。
コード400と500が発生した場合でもStatusは200が帰ってきました。
>もし、パースエラーになるなら…… responseText を自力解析の方向で。
一応responseTextからステータスコードを取り出す関数は作りましたが、
なんとかコードを取り出せるようにもう少しあがいてみます。
ありがとうございました。
ツイート | ![]() |