現在、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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
VB6で固定長の文字列の長さを変...
-
ArrayListの要素数の上限
-
BCD形式で時刻を!
-
ResultSetの内部構造(Java)
-
matchesを否定文として使う方法...
-
バイナリファイルの計算方法
-
CString 数値チェック
-
wsprintf関数の使い方について
-
char型での演算子
-
strutsを使って値をやり取りす...
-
UINT64→UINT32[2]にする方法
-
C言語のポインターに関する警告
-
VBAで配列の計算
-
ORA-01858: 数値を指定する箇所...
-
パソコンキーボードで時分秒を...
-
Path型をString型へ変換する(Java)
-
C#で、あるクラスのメンバーす...
-
[JAVA]try 内の変数を外で!?
-
Javaで改行などが出来ないのです。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
wsprintf関数の使い方について
-
DateTimePickerに値を入れたい...
-
javaのCSVデータ読込についてです
-
ArrayListの要素数の上限
-
C言語の変数(LSB)の合わせ込...
-
BCD形式で時刻を!
-
Stringクラスの変数の格納アド...
-
excel vba 時間計算と条件分岐...
-
ResultSetの内部構造(Java)
-
getParameterの値変更
-
matchesを否定文として使う方法...
-
PSQLExceptionが発生する
-
実行シェルからCOBOLへパラメー...
-
結合した文字列をファイル名に...
-
char型での演算子
-
JSPでHashMap・配列の変数の値...
-
VB6,論理演算子Orの使い方がわ...
-
Evaluate()に文字列の形式の数...
-
DOSバッチで変数の値を変数名に...
おすすめ情報