ページ 11

HttpSendRequestとHttpQueryInfoについて

Posted: 2011年6月17日(金) 21:42
by web_D
初めまして、所々探し回ったのですが対処方法、原因が的確に書かれた所が無く
こちらの方にたどり着きました。ご存知の方がいらっしゃれば教えて頂けると幸いです。
下記、本題です。

以前HttpSendRequestを使用してHttpQueryInfoにて返答を取得する
HTTP通信プログラムを作り、再度使おうかとソースコードを引っ張り出してきたのですが、
GetLastErrorで 122番「システム コールに渡されるデータ領域が小さすぎます。」が返されます。
以前正常に?動作していた頃との違いは、サイドバイサイド対応のためにコンパイル方法を若干変えたのみです。

現象の再現率は、Vistaでは頻繁に。Win7では極稀にでる。
程度で、何のエラー反応もなく動作する場合もありで 何が原因なのかが皆目見当もつかない状態です。

Re: HttpSendRequestとHttpQueryInfoについて

Posted: 2011年6月19日(日) 02:13
by YuO
web_D さんが書きました:以前HttpSendRequestを使用してHttpQueryInfoにて返答を取得する
HTTP通信プログラムを作り、再度使おうかとソースコードを引っ張り出してきたのですが、
GetLastErrorで 122番「システム コールに渡されるデータ領域が小さすぎます。」が返されます。
単純に,レスポンスヘッダが想定より大きい場合があるだけでしょう。
MSDN: Retrieving HTTP Headers (Windows)のコードにあるように,
ERROR_INSUFFICIENT_BUFFERのエラーの場合は,必要サイズだけバッファを確保して再度呼び出すようにしてください。
Windows APIでは,まずサイズ0で呼び出して必要なバッファサイズを取得し,
そのサイズのバッファを確保後に再度APIを呼び出すことで実際の値を得る,というシナリオがよくあります。

Re: HttpSendRequestとHttpQueryInfoについて

Posted: 2011年6月20日(月) 11:16
by web_D
YuOさんお返事ありがとうございます。

>単純に,レスポンスヘッダが想定より大きい場合があるだけでしょう。
>MSDN: Retrieving HTTP Headers (Windows)のコードにあるように,
>ERROR_INSUFFICIENT_BUFFERのエラーの場合は,必要サイズだけバッファを確保して再度呼び出すようにしてください。
>Windows APIでは,まずサイズ0で呼び出して必要なバッファサイズを取得し,
>そのサイズのバッファを確保後に再度APIを呼び出すことで実際の値を得る,というシナリオがよくあります。

サンプルコードも含め拝見させて頂きました。
直接的な原因は違いましたが、質としては同じ要因でした。
YuOさんのレスをきっかけに糸口にたどり着きました。ありがとうございました。