SQLの窓

2011年09月04日


VB.net : COMの Msxml2.ServerXMLHTTP を使用して WEBアプリにデータを POST する



VB.net : COMの Msxml2.ServerXMLHTTP を使用して http 通信を行う で GET による通信処理
が可能になったので、POST 処理を実装しています。テストとしては同梱している php のコードを
使って localhost で行っていますが、一般の POST を行う WEB アプリに対しても利用できます
Imports System.Web
Imports myCom

Module Module1

	Sub Main()

		' http 通信用のオブジェクトを作成
		Dim ServerXML As New myCom.ServerXMLHTTP60()

		' 呼び出す URL を設定
		Dim URL As String = "http://localhost/api/url_rfc3986.php"

		' POST する為に開く
		ServerXML.open("POST", URL, False)
		' POST する為の http ヘッダをセット
		ServerXML.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")

		' タイムアウトの設定
		Dim lResolve As Integer = 60 * 1000
		Dim lConnect As Integer = 60 * 1000
		Dim lSend As Integer = 60 * 1000
		Dim lReceive As Integer = 60 * 1000
		ServerXML.setTimeouts(lResolve, lConnect, lSend, lReceive)

		' 変換元の文字列を引数から取得する
		' 空白を指定したい場合は、"文字列 文字列" のように指定する
		Dim arguments As String() = Environment.GetCommandLineArgs()
		' 引数は一つのみ許可
		if arguments.Length <> 2 then
			Console.WriteLine("引数を指定して下さい")
			Return
		end if

		' 引数から取得
		Dim BaseData As String = arguments(1)

		' 送る為に文字列を URL エンコード( UTF-8 ) する
		' System.Web.HttpUtility.UrlEncode
		Dim PostData As String = "text=" + HttpUtility.UrlEncode(BaseData)
		' 送信するデータの長さを http ヘッダにセット
		ServerXML.SetRequestHeader("Content-Length",PostData.Length)
		' 送信
		ServerXML.send( PostData )

		' 結果の表示
		Console.WriteLine(ServerXML.responseText)

		Console.ReadLine()

	End Sub

End Module

この場合日本語の内部エンコードは、UTF-8 で行われます。他のエンコードを
行いたい場合は、HttpUtility.UrlEncode のドキュメントを参照して下さい

エラー処理
Try
	ServerXML.send( PostData )
Catch ex As Exception
	Console.WriteLine("実行エラーです")
	Console.WriteLine( ex.Message )
	Return
End Try
url_rfc3986.php Twitter の API(OAuth) で使われる URL エンコード用のコードです。 VB.net 側ではいずれにしても、URLENCODE は必要なので、一般的なものとして HttpUtility.UrlEncode で変換したものを送っています。
<?
if ( $_SERVER['REQUEST_METHOD'] == 'GET' ) {
	header( "Content-Type: text/html; Charset=utf-8" );
}
else {
	header( "Content-Type: text/plain" );
}
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

foreach( $_POST as $Key => $Value ) {
	$_POST[$Key] = str_replace("\\\\", "\\", $Value );
	$_POST[$Key] = str_replace("\\'", "'", $_POST[$Key] );
	$_POST[$Key] = str_replace("\\\"", "\"", $_POST[$Key] );
}

print url_rfc3986( $_POST['text'] );

// **********************************************************
// AOuth 用の urlencode 関数
// **********************************************************
function url_rfc3986( $str ) {
	// php 5.3.x 〜 ではこの変換は必要無い
	return str_replace('%7E', '~', rawurlencode($str));
}
?>
<? if ( $_SERVER['REQUEST_METHOD'] == 'GET' ) { ?>
<form method="post">
<textarea name="text"></textarea>
<input type="submit">
</form>
<? } ?>

※ 処理のテストをできるように、アドレスバーから呼び出した場合は入力画面
※ が表示されます。入力して実行した結果が戻される値( text/plain ) です

以下は IE8 で送られた http ヘッダです
POST /api/url_rfc3986.php HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://localhost/api/url_rfc3986.php
Accept-Language: ja
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost
Content-Length: 6
Connection: Keep-Alive
Cache-Control: no-cache

text=a

関連する記事

PHP/JavaScript/ASP/ps/py : 処理別の urlencode の結果の違い
VBScript : Seesaaの禁止ワード一括登録



posted by lightbox at 2011-09-04 12:01 | VB.NET : 通信 | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり