
現在、VB6.0にてWinInet.dllを利用したHTTP通信のプログラムを作成しております。
WEBサーバに対してリクエストを送るところまでは正常に動作しているのですが、リクエストに対するWEBサーバからの応答の取得がうまく動作しません。
具体的には、
HttpSendRequest(hUrl, vbNullString, 0, StrPtr(~), UBound(~))
でデータを送り、この応答を取得するために、
HttpQueryInfo(hUrl, HTTP_QUERY_STATUS_CODE, strBuffer, lngLength, 0)
を記述しています。
これを実行した際、LngLengthには3が戻ってくるのですが、strBufferに戻る値が、3桁ではありません。
文字コードかデータ型の違いかで全く読み取れない値が帰ってきます。
通常であればstrBufferに入る値は何も変換なく読み取れるものなのでしょうか?
今回だと、200や404がそのまま取得できるものなのでしょうか?
どなたか、分かる方がおられましたら、ご教授下さい。
No.2ベストアンサー
- 回答日時:
ありがとうございます。
第3引数の定義を
ByVal sBuffer As Any
と修正したところ、正しく値が取得できました。
ありがとうございます。
No.1
- 回答日時:
2度目の質問ですよね?
前回の質問の時も興味があったのですが、VB6環境が客先に無いことと、WinInetの経験があまりないために、発言を控えておりました。
しかし面白そうなので、可能な限りお付き合いしたいと思っております。
現在の公開されている情報の中に、APIの宣言が、どのように切られているかが記されておりません。
APIの宣言に対し利用方法が適していない場合、単に文字列のアドレスが入る場合もありますし、文字コードを変換するだけで済む場合もあります。
またこちらの環境で再現させるためにも、APIを発行している部分だけではなく
InternetOpen
InternetConnect
HttpOpenRequest
HttpSendRequest
HttpQueryInfo
の「各宣言」と、その「利用している部分のソース」を抜粋でもよいので載せてください。
(もちろん定数部は不要です。)
この回答への補足
返信ありがとうございます。
一連の動作PGを掲載します。
hOpen = InternetOpen(Code, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0&)
hCon = InternetConnect(hOpen, Server, INTERNET_DEFAULT_HTTP_PORT, vbNullString, vbNullString, INTERNET_SERVICE_HTTP, 0&, 0&)
hUrl = HttpOpenRequest(hCon, "POST", ServerAdress, "HTTP/1.1", vbNullString, 0, INTERNET_FLAG_NO_CACHE_WRITE, 0)
sHeader = "Accept: image/jpeg" & vbCrLf & vbNullString
hReq = HttpAddRequestHeaders(hUrl, sHeader, Len(sHeader), HTTP_ADDREQ_FLAG_REPLACE Or HTTP_ADDREQ_FLAG_ADD)
sHeader = "Accept-Language: ja" & vbCrLf & vbNullString
hReq = HttpAddRequestHeaders(hUrl, sHeader, Len(sHeader), HTTP_ADDREQ_FLAG_REPLACE Or HTTP_ADDREQ_FLAG_ADD)
sHeader = "Content-Type:-----1234567890abc" & vbCrLf & vbNullString
hReq = HttpAddRequestHeaders(hUrl, sHeader, Len(sHeader), HTTP_ADDREQ_FLAG_REPLACE Or HTTP_ADDREQ_FLAG_ADD)
sHeader = "Connection: Keep-Alive" & vbCrLf & vbNullString
hReq = HttpAddRequestHeaders(hUrl, sHeader, Len(sHeader), HTTP_ADDREQ_FLAG_REPLACE Or HTTP_ADDREQ_FLAG_ADD)
sHeader = "Cache-Control: no-cache" & vbCrLf & vbNullString
hReq = HttpAddRequestHeaders(hUrl, sHeader, Len(sHeader), HTTP_ADDREQ_FLAG_REPLACE Or HTTP_ADDREQ_FLAG_ADD)
sHeader = "Proxy-Connection: Keep-Alive" & vbCrLf & vbNullString
hReq = HttpAddRequestHeaders(hUrl, sHeader, Len(sHeader), HTTP_ADDREQ_FLAG_REPLACE Or HTTP_ADDREQ_FLAG_ADD)
ReDim filebuf(1 To FileLen(filename)) As Byte
fNum = FreeFile()
Open filename For Binary As fNum
Get fNum, , filebuf
Close fNum
Call AddMimeField("Content-Disposition: form-data; name=""" & fname & """; filename=""" & filename & """" & vbCrLf _
& "Content-Type: text/plain", filebuf)
hReq = HttpSendRequest(hUrl, vbNullString, 0, StrPtr(mimedata), UBound(mimedata))
Dim strBuffer As String * 1024
Dim lngLength As Long
lngLength = 1024
strBuffer = vbNullString
hReq = HttpQueryInfo(hUrl, HTTP_QUERY_STATUS_CODE, strBuffer, lngLength, 0)
-------------------
Private Function AddMimeField(fheader As String, fdata As Variant)
mimedata = mimedata & StrConv(“-----1234567890abc” & vbCrLf & fheader & vbCrLf & vbCrLf, vbFromUnicode) & fdata & StrConv(vbCrLf, vbFromUnicode ) & StrConv(“-----1234567890abc --" & vbCrLf, vbFromUnicode)
End Function
---------------------
Public Declare Function InternetConnect Lib "wininet.dll" _
Alias "InternetConnectA" _
(ByVal hInternetSession As Long, _
ByVal sServerName As String, _
ByVal nServerPort As Integer, _
ByVal sUsername As String, _
ByVal sPassword As String, _
ByVal lService As Long, _
ByVal lFlags As Long, _
ByVal lContext As Long) As Long
Public Declare Function HttpOpenRequest Lib "wininet.dll" _
Alias "HttpOpenRequestA" _
(ByVal hHttpSession As Long, _
ByVal sVerb As String, _
ByVal sObjectName As String, _
ByVal sVersion As String, _
ByVal sReferer As String, _
ByVal something As Long, _
ByVal lFlags As Long, _
ByVal lContext As Long) As Long
Public Declare Function HttpSendRequest Lib "wininet.dll" _
Alias "HttpSendRequestA" _
(ByVal hHttpRequest As Long, _
ByVal sHeaders As String, _
ByVal lHeadersLength As Long, _
ByVal sOptional As Any, _
ByVal lOptionalLength As Long) As Integer
Public Declare Function HttpQueryInfo Lib "wininet.dll" _
Alias "HttpQueryInfoA" _
(ByVal hHttpRequest As Long, _
ByVal lInfoLevel As Long, _
ByRef sBuffer As String, _
ByRef lBufferLength As Long, _
ByRef lIndex As Long) As Integer
以上です。
長文となってしまいましたが、何か間違った記述等分かれば、ご教授お願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Excel(エクセル) VBA : スクレイピングできない 4 2023/05/12 22:26
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- 統計学 確率統計の問題です。 3 2022/04/07 04:39
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- 音楽配信 音楽を購入したいのですが、音声データをQRコードで読みとる方法とは? 2 2022/06/13 23:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ArrayListの要素数の上限
-
DateTimePickerに値を入れたい...
-
ResultSetの内部構造(Java)
-
javaのCSVデータ読込についてです
-
JSPでの計算結果表示
-
実行シェルからCOBOLへパラメー...
-
StringBuilderをStringに代入
-
DOSバッチで変数の値を変数名に...
-
excel vba 時間計算と条件分岐...
-
byte配列→float型の値を読みlon...
-
JSPでHashMap・配列の変数の値...
-
char型での演算子
-
wsprintf関数の使い方について
-
C#について質問です。文字列型(...
-
ダブルクォーテーションを含む...
-
日付や時刻の"01"を" 1"に変換...
-
matchesを否定文として使う方法...
-
WinInet.dllを利用したHttpQuer...
-
BCD形式で時刻を!
-
偶数ビットだけと奇数ビットだ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
ArrayListの要素数の上限
-
Stringクラスの変数の格納アド...
-
javaのCSVデータ読込についてです
-
PSQLExceptionが発生する
-
excel vba 時間計算と条件分岐...
-
wsprintf関数の使い方について
-
BCD形式で時刻を!
-
C言語の変数(LSB)の合わせ込...
-
DOSバッチで変数の値を変数名に...
-
JSPでの計算結果表示
-
DateTimePickerに値を入れたい...
-
JSPでHashMap・配列の変数の値...
-
StringBufferクラスについて
-
char型での演算子
-
結合した文字列をファイル名に...
-
String str = "a\\\\b\\\\c";
-
Evaluate()に文字列の形式の数...
-
getParameterの値変更
-
matchesを否定文として使う方法...
おすすめ情報