その際、全角文字を送信した際、受信サーバー側で文字化けをしてしまいます。
Set xmlHttp = Server.CreateObject("Msxml2.XMLHTTP")
strPostData = "aaa=あああ"
xmlHttp.Open "POST", "http://xxx/xxx.asp", False
xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xmlHttp.setRequestHeader "Referer", "http://xxx/xxx.asp"
xmlHttp.Send strPostData
Response.Write xmlHttp.responseText
このようにプログラムを記述しているのですが何が問題かおおしえいただけますでしょうか。
尚、HTMLのフォームから同様の情報をPOSTした際は文字化けなく正しく処理がおこなわれます。
受け取り側のプログラムに関してはこちらでは中身が見れない状態になっております。
上記送信プログラムとHTMLのフォームそれぞれ文字コードはSJISです。
ASP ファイル自体の文字コードがおかしいか、 URLEncode してないからだと思う。
Set xmlHttp = Server.CreateObject("Msxml2.XMLHTTP") strPostData = "aaa=" & Server.URLEncode("あああ") xmlHttp.Open "POST", "http://xxx/xxx.asp", False xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" xmlHttp.setRequestHeader "Referer", "http://xxx/xxx.asp" xmlHttp.Send strPostData Response.Write xmlHttp.responseText
前回回答したものです。
ADODB.Stream で文字コードを変換してみました。
こちらでいかがでしょうか?
Option Explicit Dim html Dim url, strPostData url = "http://xxx/xxx.asp" strPostData = "aaa=あああ" html = GetHttpResponse("POST", url, strPostData, "Shift_JIS") Response.Write html Private Function GetHttpResponse(ByVal methodType, ByVal url, ByVal sendData, ByVal charset) Const adTypeBinary = 1 Const adTypeText = 2 Const agent = "Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.1)" Dim dst Set dst = Server.CreateObject("ADODB.Stream") dst.Open dst.Type = adTypeBinary Dim xmlhttp Set xmlhttp = Server.CreateObject("Msxml2.XMLHTTP") xmlhttp.Open methodType, url, False xmlhttp.SetRequestHeader "User-Agent", agent xmlhttp.send (sendData) dst.Write (xmlhttp.responseBody) dst.Position = 0 dst.Type = adTypeText dst.charset = charset GetHttpResponse = dst.ReadText dst.Close Set dst = Nothing End Function
ありがとうございます。ADODB.Streamを使用しても以前文字化けするようです。
ただ、上記に加えxmlhttpをNothingすることで相手先のサーバーから帰ってくる(応答)HTMLの文字化けが解消されました。また、情報があればお教えいただければありがたいです。
相手先のサーバーから帰ってくる(応答)HTMLが文字化け
という認識でいたのですが、違うのでしょうか?
POST先で、パラメータが化けてしまうということでしょうか?
先程の回答に、
xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
が抜けていましたので、追加してみてください。
回答へのコメント
を開いてもらえると、無駄に回答しなくても済むのですが。
現在、お教えいただいたコードを元に下記のようにしております。
「回答へのコメント」というのはどこから見るのでしょうか。(スミマセン。はてなの使い方がわかっていないかもしれません)
今一度情報を整理して記載します。
サーバーAからPOSTでデータをサーバーBに飛ばします。
サーバーBでは受け取ったデータをDBに格納し、サーバーAにHTMLを返します。
このHTMLは「処理が終了しました。」という内容だけのHTMLになります。
もともとの状況として、サーバーBでPOSTで受け取ったデータが文字化けしていて
且つ、戻ってくるHTMLも文字化けしているという状況でした。
festerさんに教えていただいたADODB.Streamでの文字コード変換によって、
HTMLの文字化けは解消したのですが、サーバーBでPOSTで受け取ったデータの
文字化けは改善されない状態です。
xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
を追加してもNGでした。
xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=SJIS"
としても同様にNGでした。
HTMLのフォームを作成してそこからPOSTした場合は正しく処理されるので、
サーバーBの問題ではなく、サーバーAのPOSTするプログラムの問題だと思っております。
たしか、はてなは回答が2回までとの制限があったかとおもいますので、
この質問の続きを別質問で立てまして、一人の回答数を50件までに拡張しました。
http://q.hatena.ne.jp/1226539573
こちらになります。
もし、お時間があいているときがあれば引き続きご教授いただけるとうれしいです。
Option Explicit
Dim html
Dim url, strPostData
url = "http://xxx/xxx.asp"
strPostData = "aaa=あああ"
html = GetHttpResponse("POST", url, strPostData, "Shift_JIS")
Response.Write html
Private Function GetHttpResponse(ByVal methodType, ByVal url, ByVal sendData, ByVal charset)
Const adTypeBinary = 1
Const adTypeText = 2
Const agent = "Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.1)"
Dim dst
Set dst = Server.CreateObject("ADODB.Stream")
dst.Open
dst.Type = adTypeBinary
Dim xmlhttp
Set xmlhttp = Server.CreateObject("Msxml2.XMLHTTP")
xmlhttp.Open methodType, url, False
xmlhttp.SetRequestHeader "User-Agent", agent
xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xmlhttp.send (sendData)
dst.Write (xmlhttp.responseBody)
dst.Position = 0
dst.Type = adTypeText
dst.charset = charset
GetHttpResponse = dst.ReadText
dst.Close
Set xmlhttp = Nothing
Set dst = Nothing
End Function
URLEncodeも試しました。BASPを使って文字コード自体をUTF-8等に切り替えたりしてみたのですが、ダメでした。ASPファイルの文字コードはSJISです。