プロが教えるわが家の防犯対策術!

現在、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がそのまま取得できるものなのでしょうか?
どなたか、分かる方がおられましたら、ご教授下さい。

A 回答 (2件)

HttpQueryInfoの第3引数の定義がNG



http://www.google.com/search?q=Declare+Function+ …
    • good
    • 0
この回答へのお礼

ありがとうございます。
第3引数の定義を
ByVal sBuffer As Any
と修正したところ、正しく値が取得できました。

ありがとうございます。

お礼日時:2006/06/19 10:35

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

以上です。
長文となってしまいましたが、何か間違った記述等分かれば、ご教授お願いいたします。

補足日時:2006/06/19 09:16
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!