SQLの窓

2014年07月24日


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

以下のように参照して下さい。


コンソールアプリケーションです。
Imports MSXML2
Imports System.IO

Module Module1

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

		' ****************************
		' 呼び出す URL を設定
		' ****************************
		Dim URL As String = "http://yourdomain/put/put.php"

		' ****************************
		' POST する為に開く
		' ****************************
		ServerXML.open("POST", URL, False)

		' ****************************
		' タイムアウトの設定
		' ****************************
		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 fs As New FileStream( _
		 "C:\user\web\web\put\winofsql.png", _
		 FileMode.Open, FileAccess.Read)

		' ****************************
		'ファイルを読み込むバイト型配列
		' ****************************
		Dim bs(fs.Length - 1) As Byte
		'ファイルの内容をすべて読み込む
		fs.Read(bs, 0, bs.Length)
		'閉じる
		fs.Close()

		' ****************************
		' 送信するデータの長さをヘッダにセット
		' ****************************
		ServerXML.setRequestHeader("Content-Length", bs.Length)
		' 送信
		ServerXML.send(bs)

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

		Console.ReadLine()
	End Sub

End Module

本来は、.vbs または .js を拡張子として持つスクリプトから実行するものです。

VBscript(または JScript) で簡単にバイナリファイルをアップロードする

参照した Imports MSXML2 によって、Framework からの処理が可能になっています。PHP 側は、スクリプトで利用した PHP と同じもので、バイト配列を直接 POST して PHP では以下のようにして受け取ります
<?
session_start();
$id = session_id();


$fp = fopen( "php://input", "r" );
$wfp = fopen( "image/$id.png", "w" );

while( $ret = fread( $fp, 4096 ) ) {

	fwrite( $wfp, $ret );

}

fclose($wfp);
fclose($fp);


print $id . ".png\n";
?>
で画像が保存されました


この PHP では http ヘッダを指定していませんので、php ソースのキャラクタセットは UTF-8N にする必要があります。他のキャラクタセットで php のソースコードを記述する必要がある場合は、http ヘッダで Content-Type の Charset を明示して下さい。

関連する記事

VB.net : COMの Msxml2.ServerXMLHTTP を使用して http 通信を行う



タグ:VB.NET com
posted by lightbox at 2014-07-24 21:07 | VB.NET : 通信 | このブログの読者になる | 更新情報をチェックする

2011年10月16日


VB.net : TKFP.DLL 1.4.3 を使って FTPS でファイル(フォルダ)の一覧を取得する

.NET用FTPクラスライブラリ (TKFP.DLL) 1.4.3
オンラインライブラリ

サンプル付きをダウンロードすると、Form で動くサンプルが VB.net 
と C# で付いてきます。
( プライベートクラスを ListViewItem を継承して作成して ListView で表示するサンプル )



以下はそれを元にバッチでディリクトリ内の
フォルダファイルとの一覧を表示するようにしたものです
Imports TKFP.Net
Imports TKFP.IO

Module Module1

	Sub Main()

		' FTP 用基本認証
		Dim logon As BasicFtpLogon = New BasicFtpLogon("ユーザ", "パスワード")
		' FTP クライアント
		Dim FtpClient As FtpClient = New FtpClient(logon, "サーバ", 21)
		'パッシブモード
		FtpClient.ConnectionMode = ConnectionModes.Passive
		'リストの取得コマンドを設定
		FtpClient.ListType = TKFP.Net.ListType.LIST
		'取得したリスト情報の有効時間を設定
		FtpClient.ListCacheValidityInterval = 60
		FtpClient.FileSystemCacheValidityInterval = 60

		' SSL で接続する
		FtpClient.AuthenticationProtocol = AuthenticationProtocols.Explicit_SSL

		' LIST情報の解析クラスを指定
		FtpClient.ListDataLoader = New TKFP.IO.UnixListDataLoader()

		'日本語ファイル名の文字コードを指定( shift_jis がデフォルト )
		FtpClient.FileNameCharset = "sjis"

		' 接続
		If Not FtpClient.Connect() Then
			FtpClient.Close()
			FtpClient = Nothing
			Return
		End If

		' メッセージ
		If FtpClient.IsEncrypted Then
			Console.WriteLine("暗号化されています")
		End If

		' ディレクトリオブジェクトを作成
		Dim CurrentDirectory As DirectoryInfo = New DirectoryInfo(FtpClient, "対象フォルダのパス")

		'サブフォルダの一覧取得
		Dim SubFolder As DirectoryInfo
		For Each SubFolder In CurrentDirectory.GetDirectories()
			Console.WriteLine("[" + SubFolder.Name + "]")
		Next

		'ファイル一覧取得
		Dim file As FileInfo
		For Each file In CurrentDirectory.GetFiles()
			Console.WriteLine(file.Name)
		Next

		' 接続解除
		FtpClient.Close()
		FtpClient = Nothing

		Console.ReadLine()

	End Sub

End Module

関連する記事

VB.net : TKMP.DLL 3.0.1 を使って IMAP でメール本文の一覧を取得する


posted by lightbox at 2011-10-16 17:18 | VB.NET : 通信 | このブログの読者になる | 更新情報をチェックする

2011年10月01日


VB.net : TKMP.DLL 3.0.1 を使って IMAP でメール本文の一覧を取得する

.NET用メール送受信クラスライブラリ (TKMP.DLL) 3.0.1

TKMP は、VB.net や C# から日本語環境を気にしないでメールの送受信
が行える貴重なライブラリですが、IMAP に対応しておられるのに添付さ
れているドキュメントや、WEB 上のサンプルコードにその記述がありま
せんでしたので、作成しました。

※ IMAP は 2011/08/11 に対応されています。
オンラインライブラリ
続きを読む( ソースコード )

posted by lightbox at 2011-10-01 16:05 | VB.NET : 通信 | このブログの読者になる | 更新情報をチェックする

2011年09月18日


VB.net : COMの Msxml2.ServerXMLHTTP を使用して Google のURL短縮サービスを使用する( JSON )



パッケージにはすぐ実行できる server_xmlhttp.exe が入っていますが、
同じディレクトリに MSXML2.dll が必要です

★ MSXML2.dll( Msxml2.ServerXMLHTTP参照用 : 同梱しています )
★ server_xmlhttp.exe APIキー URL で実行


以下のページは、Google の API の内容を記述したページです
Google URL Shortener API

アカウントでログインして、APIs Console にアクセスしてAPI キーを取得できます




※ ここの API で戻されるのは、JSONです
※ POST でデータを取得します
※ この API で、URL エンコードは必要ありません

簡単な JSON なので、文字列処理で結果を取得しています( Split、Replace )

Imports myCom

Module Module1

	Sub Main()

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

		' タイムアウトの設定
		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)

		' 呼び出す URL を設定
		Dim URL As String = "https://www.googleapis.com/urlshortener/v1/url"

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

		' 第一引数は APIキー
		URL += "?key=" + arguments(1)

		' 第ニ引数は URL
		Dim TargetURL As String = arguments(2)

		' 結果
		Console.WriteLine( URL )

		' 送信データ
		Dim SendData As String = "{""longUrl"": """ + TargetURL + """}"

		' POST する為に開く
		ServerXML.open("POST", URL, False)

		' HTTP ヘッダをセット( Google の仕様での要求内容 )
		ServerXML.SetRequestHeader("Content-Type","application/json") 

		' 送信
		ServerXML.send(SendData)

		' テキストとして表示
		Console.WriteLine(ServerXML.responseText)

		' JSON を String として分解
		Dim value As String = ServerXML.responseText

		' 区切り文字列でテキストデータ全体を分割
		Dim stringSeparators As String() = {","}
		Dim myParamArray1 As String() = value.Split(stringSeparators, StringSplitOptions.None)

		value = myParamArray1(1)
		stringSeparators(0) = ": "
		myParamArray1 = value.Split(stringSeparators, StringSplitOptions.None)

		value = myParamArray1(1)
		value = value.Replace("""", "")

		' 結果
		Console.WriteLine( value )

		Console.ReadLine()

	End Sub

End Module

関連する記事

ServerXMLHTTP60(Msxml2.ServerXMLHTTP) 用の dll は同梱していますが、SDK より自分で
作成する場合は、以下のリンク先のページ中の「.NET から COM を使う」のリンク先を参照して
下さい

VB.net : COMの Msxml2.ServerXMLHTTP を使用して http 通信を行う


VB.net : COMの Msxml2.ServerXMLHTTP を使用して URL短縮サービス[p.tl] を使用する
VB.net : COMの Msxml2.ServerXMLHTTP を使用して URL短縮サービス[bit.ly] を使用する( XML と TEXT )
PHP : Google のURL短縮APIを呼び出す関数


posted by lightbox at 2011-09-18 14:52 | VB.NET : 通信 | このブログの読者になる | 更新情報をチェックする

VB.net : COMの Msxml2.ServerXMLHTTP を使用して URL短縮サービス[bit.ly] を使用する( XML と TEXT )



パッケージにはすぐ実行できる server_xmlhttp.exe が入っていますが、
同じディレクトリに MSXML2.dll が必要です

★ MSXML2.dll( Msxml2.ServerXMLHTTP参照用 : 同梱しています )
★ server_xmlhttp.exe ユーザ名 APIキー URL で実行


以下のページは、bit.ly の API の内容を記述したページです
bitly REST API method documentation

アカウントでログインして、http://bitly.com/a/your_api_key にアクセスしてAPI キーを取得できます
※ ここの API で戻されるのは、JSON と XML と TEXTです

ここでは、XML と TEXT の処理を記述しています
Imports System.Web
Imports myCom

Module Module1

	Sub Main()

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

		' タイムアウトの設定
		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)

		' 呼び出す URL を設定
		Dim URL As String = "http://api.bitly.com/v3/shorten"

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

		' 第一引数は ユーザ名
		URL += "?login=" + arguments(1)

		' 第一引数は APIキー
		URL += "&apiKey=" + arguments(2)

		' 第二引数は URL
		Dim TargetURL As String = arguments(3)

		' 送る為に文字列を URL エンコードする
		' System.Web.HttpUtility.UrlEncode
		TargetURL = HttpUtility.UrlEncode(TargetURL)

		' 直接 URL のみを取得用を同時に作成( 最後に実行 )
		Dim TextGet As String = URL + "&longUrl=" + TargetURL + "&format=txt"

		' 元の URL と フォーマットを追加
		URL += "&longUrl=" + TargetURL + "&format=xml"

		' 結果
		Console.WriteLine( URL )

		' GET する為に開く
		ServerXML.open("GET", URL, False)

		' 送信
		ServerXML.send()

		' XML をテキストとして表示
		Console.WriteLine(ServerXML.responseText)

		' XML を DOMDocument として取得
		Dim myDom As myCom.DOMDocument60 = ServerXML.responseXML

		' 対象のノードリストを取得
		Dim nodeList As IXMLDOMNodeList = myDom.getElementsByTagName("url")

		' 対象のノードを取得
		Dim node As IXMLDOMNode = nodeList.item(0)

		' テキストノードを取得
		Dim node2 As IXMLDOMNode = node.firstChild()

		' テキストノードの値( 目的の内容 ) を取得
		Dim value As Object = node2.nodeValue()

		' 結果
		Console.WriteLine( value.ToString() )

		' --------------------------------------------------

		'TEXT で取得
		ServerXML.open("GET", TextGet, False)

		' 送信
		ServerXML.send()

		' テキストとして表示
		Console.WriteLine("テキストフォーマットで取得 : " + ServerXML.responseText)

		Console.ReadLine()

	End Sub

End Module

関連する記事

ServerXMLHTTP60(Msxml2.ServerXMLHTTP) 用の dll は同梱していますが、SDK より自分で
作成する場合は、以下のリンク先のページ中の「.NET から COM を使う」のリンク先を参照して
下さい

VB.net : COMの Msxml2.ServerXMLHTTP を使用して http 通信を行う


VB.net : COMの Msxml2.ServerXMLHTTP を使用して URL短縮サービス[p.tl] を使用する
VB.net : COMの Msxml2.ServerXMLHTTP を使用して Google のURL短縮サービスを使用する( JSON )


posted by lightbox at 2011-09-18 13:46 | VB.NET : 通信 | このブログの読者になる | 更新情報をチェックする

VB.net : COMの Msxml2.ServerXMLHTTP を使用して URL短縮サービス[p.tl] を使用する( JSON )


( Json.NET 4.0 Release 2 のドキュメントと readme とバイナリを同梱 )
オンラインドキュメント

パッケージにはすぐ実行できる server_xmlhttp.exe が入っていますが、
同じディレクトリに Newtonsoft.Json.Net35.dll と MSXML2.dll が必要です

★ Newtonsoft.Json.Net35.dll ( Json.NET用 : 同梱しています )
★ MSXML2.dll( Msxml2.ServerXMLHTTP参照用 : 同梱しています )
★ server_xmlhttp.exe APIキー URL で実行


以下のページは、p.tl の API の内容を記述したページです
WebAPI │ URL短縮サービス[p.tl]

メールアドレスより、API キーを取得できます
※ ここの API で戻されるのは、JSON フォーマットのみです

関係する記事

Json.NET を使用して JSON 文字列を VB.net で使用する( 逆シリアライズ )

※ JSON の処理は外部ライブラリ(Json.NET)を使っています

Imports System.Web
Imports myCom
Imports Newtonsoft.Json 
Imports Newtonsoft.Json.Linq

Module Module1

	Sub Main()

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

		' タイムアウトの設定
		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)

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

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

		' 第一引数は APIキー
		URL += "?key=" + arguments(1)

		' 第二引数は URL
		Dim TargetURL As String = arguments(2)

		' 送る為に文字列を URL エンコードする
		' System.Web.HttpUtility.UrlEncode
		TargetURL = HttpUtility.UrlEncode(TargetURL)

		URL += "&url=" + TargetURL

		' GET する為に開く
		ServerXML.open("GET", URL, False)

		' 送信
		ServerXML.send()

		Console.WriteLine(ServerXML.responseText)

		' 逆シリアライズ
		' http://json.codeplex.com/ よりダウンロードした Newtonsoft.Json.Net35.dll を使う
		Dim JsonObject As Object = JsonConvert.DeserializeObject( ServerXML.responseText )

		' 対象が解っている場合の読み取り
		Console.WriteLine( JsonObject("short_url") )

		' プロパティで一覧参照
		' Imports Newtonsoft.Json.Linq
		Dim jp As JProperty

		For Each jp In JsonObject
			' jp.Value は JToken
			Console.WriteLine( jp.Name + " : " + jp.Value.ToString() )
		Next

		Console.ReadLine()

	End Sub

End Module

関連する記事

ServerXMLHTTP60(Msxml2.ServerXMLHTTP) 用の dll は同梱していますが、SDK より自分で
作成する場合は、以下のリンク先のページ中の「.NET から COM を使う」のリンク先を参照して
下さい

VB.net : COMの Msxml2.ServerXMLHTTP を使用して http 通信を行う


VB.net : COMの Msxml2.ServerXMLHTTP を使用して URL短縮サービス[bit.ly] を使用する( XML と TEXT )
VB.net : COMの Msxml2.ServerXMLHTTP を使用して Google のURL短縮サービスを使用する( JSON )


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

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 : 通信 | このブログの読者になる | 更新情報をチェックする

2011年09月03日


VB.net : COMの Msxml2.ServerXMLHTTP を使用して http 通信を行う

Msxml2.ServerXMLHTTP は、通常 VBScript で利用されるサーバー用のクラスで、CreateObject でインスタンスを作成します。Framework には同様のクラスが存在しますが、経験からするとこちらのほうが簡単で信頼性が高いです。



VB.net で COM を使用する場合は以下のように「参照」を設定する必要があります



html 等の http ヘッダを送れないファイルについては、urf-8 扱いになります(つまりutf-8以外のキャラクタセットで書かれていると日本語を正しく扱えません)。サーバー側で対応したい場合は、.htaccess で指定する事によって、キャラクタセットの設定を http ヘッダに追加できます。php 等のアプリケーションでは、http ヘッダに直接出力します

※ http ヘッダにキャラクタセットの情報があれば、自動的に日本語は処理されます
Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim ServerXML As New MSXML2.ServerXMLHTTP60()

        Dim URL As String = Me.TextBox1.Text
        ServerXML.open("GET", URL, False)

        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)
        ServerXML.send()

        Me.TextBox2.Text = ServerXML.responseText

    End Sub
End Class


「参照」する正確な名前の確認は、以下の手順で行えます。

1) HKEY_CLASSES_ROOT から Msxml2.XMLHTTP の最新バージョンのエントリを探す
2) サブキーの CLSID から ID を取得
 この場合は Msxml2.XMLHTTP.6.0 で {88d96a0a-f192-11d4-a65f-0040963251e5}
3) HKEY_CLASSES_ROOT\CLSID のツリー内より該当するエントリを探す
4) そのエントリのサブキーの TypeLib より値を取得
※ この場合は {F5078F18-C551-11D3-89B9-0000F81FE221}
5) HKEY_CLASSES_ROOT\TypeLib のツリー内より該当するエントリを探す
6) 最新バージョンのサブキーより、名前を取得する
※ この場合は Microsoft XML, v6.0

以下は、Visual Studio を使用しないでビルドする為のパッケージです。
その場合は、COM をインポートするライブラリを手動で作成する必要があります。



関連する記事(ライブラリ作成)

.NET から COM を使う


Microsoft のドキュメント

IServerXMLHTTPRequest/ServerXMLHTTP Members( 英文 )
※ イベントはありません。メソッドとプロパティのみです
※ クッキーは自動的にやりとりされます

System.Net 名前空間


タグ:VB.NET HTTP com
posted by lightbox at 2011-09-03 11:30 | VB.NET : 通信 | このブログの読者になる | 更新情報をチェックする

2010年08月12日


VB.net : IPアドレスを IPv4 と IPv6 に区別して取得する

PC の構成によって、IPv6 も使用される場合、通常の IPv4 と区別して情報を取り出す必要があります
Module Module1

    Sub Main()

		' コンピュータ名
		Dim HostName As String = System.Net.Dns.GetHostName()

		System.Console.WriteLine(HostName)

		Dim HostIP() As System.Net.IPAddress
		Dim HostIPAdress As String = ""

		HostIP = System.Net.Dns.GetHostEntry(HostName).AddressList

		For idx As Integer = 0 To HostIP.Length - 1
			' IP version 4 : InterNetwork
			If HostIP(idx).AddressFamily = Net.Sockets.AddressFamily.InterNetwork Then
				HostIPAdress = HostIP(idx).ToString
				System.Console.WriteLine(HostIPAdress)
			End If
			'  InterNetworkV6 は IPv6
			If HostIP(idx).AddressFamily = Net.Sockets.AddressFamily.InterNetworkV6 Then
				System.Console.WriteLine(HostIP(idx).IsIPv6LinkLocal)
				HostIPAdress = HostIP(idx).ToString
				System.Console.WriteLine(HostIPAdress)
			End If
		Next

		System.Console.ReadLine()

	End Sub

End Module




posted by lightbox at 2010-08-12 14:46 | VB.NET : 通信 | このブログの読者になる | 更新情報をチェックする

2010年07月01日


Json.NET を使用して JSON 文字列を VB.net で使用する( 逆シリアライズ )


ブラウザでダウンロード
サンプルに添付した json.txt は、Twitter の verify_credentials.json
で取得したものです。

Json.NET からダウンロードしたアセンブリをソースコードと同じ場所に置いて
__libPath.txt に既に記述済みの該当アセンブリの先頭のセミコロンを削除し
て下さい。Framework2.0 か Framework3.5 の選択ですが、両方インストール
されている場合はどちらでもいいと思います。
※ Framework は __buildPath.txt で選択して下さい

関連する記事

PHP + Twitter API : 資格情報の確認と アプリケーションに割り当てられた My Access Token
' ********************************************************
' ■ アセンブリのダウンロード
'    http://json.codeplex.com/
' ■ マニュアル
'    http://james.newtonking.com/projects/json/help/
' ********************************************************
Imports System.IO
Imports System.Text
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq

Module MyModule

' ********************************************************
' FileStream は Stream を継承
' ********************************************************
Sub Main()

	' WEB(Twitter) から返された json フォーマットのテキストを開く
	Dim JsonText As StreamReader = New StreamReader( "json.txt", Encoding.UTF8 )

	' 全て読み込む
	Dim Text As String = JsonText.ReadToEnd()

	' 逆シリアライズ
	Dim JsonObject As Object = JsonConvert.DeserializeObject( Text )

	' 閉じる
	JsonText.Close()

	' Object として参照
	Console.WriteLine( JsonObject("statuses_count") )

	' プロパティで一覧参照
	Dim jp As JProperty

	For Each jp In JsonObject
		' jp.Value は JToken
		Console.WriteLine( jp.Name + " : " + jp.Value.ToString() )
	Next

End Sub

End Module


以下は実行結果です
>json.exe
968
statuses_count : 968
notifications : false
profile_sidebar_border_color : "F2E195"
description : "絵を描くプログラマ"
location : ""
screen_name : "sworc"
profile_use_background_image : true
followers_count : 13
status : {
  "favorited": false,
  "coordinates": null,
  "source": "<a href=\"http://winofsql.jp/\" rel=\"nofollow\">TwitLink</a>",
  "created_at": "Sun Jun 27 07:07:03 +0000 2010",
  "place": null,
  "in_reply_to_screen_name": null,
  "truncated": false,
  "in_reply_to_user_id": null,
  "id": 17148268393,
  "contributors": null,
  "geo": null,
  "in_reply_to_status_id": null,
  "text": "資料 TCPDF 利用前の注意事項 http://bit.ly/cXWWH2"
}
contributors_enabled : false
friends_count : 4
lang : "ja"
geo_enabled : false
profile_background_color : "000000"
favourites_count : 0
verified : false
profile_text_color : "0C3E53"
following : false
time_zone : "Osaka"
created_at : "Sat Nov 21 04:24:25 +0000 2009"
profile_link_color : "FF0000"
protected : false
profile_background_image_url : "http://a3.twimg.com/profile_background_images/59645045/bbs_img_4598c0b36c78d.jpg"
name : "night walker"
profile_sidebar_fill_color : "FFF7CC"
url : "http://winofsql.jp/tegaki"
profile_image_url : "http://a3.twimg.com/profile_images/536588405/tw_normal.png"

id : 91500526
profile_background_tile : false
utc_offset : 32400

以下は、二通りの参照方法です
( どちらも同じ結果になります )
※ 値がダブルクォートで挟まれている場合は、.Value が使用でき、
※ ダブルクォートが省かれます( ダブルクォートが無いとエラー )
' Object として参照
Console.WriteLine( JsonObject("statuses_count") )
Console.WriteLine()
Console.WriteLine( JsonObject("status") )
Console.WriteLine()
Console.WriteLine( JsonObject("status")("source").Value )
Console.WriteLine( "----------------------------------------------" )

' パスで取得
Console.WriteLine( JsonObject.SelectToken("statuses_count") )
Console.WriteLine()
Console.WriteLine( JsonObject.SelectToken("status") )
Console.WriteLine()
Console.WriteLine( JsonObject.SelectToken("status.source").Value )
Console.WriteLine( "----------------------------------------------" )

Object の場合、JProperty で下位オブジェクトを取得し、
JObject の場合は、キー/値ペア で下位オブジェクトを取得します。
( JObject.Parse を使用すると、JObject として明示して取得できます )
' Object => JProperty
Dim jp As JProperty
For Each jp In JsonObject
	Console.WriteLine( jp.Name + " : " + jp.Value.ToString() )
Next

' JObject => キー/値ペア
Dim kv As System.Collections.Generic.KeyValuePair(Of String, JToken)'
For Each kv In Ctype(JsonObject,JObject)
	Console.WriteLine( kv.Key + " : " + kv.Value.ToString()  )
Next


以下は配列のサンプルです。
( [ ] は配列です )
--------------------------------------------------
【実行】
--------------------------------------------------
Console.WriteLine( JsonObject.SelectToken("test[0].k_name").Value )
Console.WriteLine( JsonObject.SelectToken("test[0].k_value").Value )
Console.WriteLine( JsonObject.SelectToken("test[1].k_name").Value )
Console.WriteLine( JsonObject.SelectToken("test[1].k_value").Value )

--------------------------------------------------
【データ】
--------------------------------------------------
test : [
  {
    "k_name": "A",
    "k_value": "123"
  },
  {
    "k_name": "B",
    "k_value": "456"
  }
]

--------------------------------------------------
【結果】
--------------------------------------------------
A
123
B
456


タグ:JSON VB.NET
posted by lightbox at 2010-07-01 22:21 | VB.NET : 通信 | このブログの読者になる | 更新情報をチェックする

2010年06月28日


VB.net : クライアントが送ったヘッダを表示するだけの HTTPサーバーU

2010/06/28 : 更新

POST(ファイルアップロードを含む) 処理に対応しています。単純な処理だと二つ問題が出たので、POST でうまく動かない場合がありました。

IE はヘッダ部分とデータ部分を分けて送信するようなのですが(必ずではありませんが、高い確率でそうなるようです)、ヘッダ部分が短い為、次のStream の読み込みでデータが残っているのに取得できないと言う現象が起こりましたので、二回目以降の Stream の読み込みの前で Sleep を追加しました。

また、データが完全に無いのにも関わらず、Stream を読んでしまうと戻って来ないので、読む前にデータが存在するかどうかをチェックするようにしました。これは、データの完全な終了は、やはり Content-Length を使う事でしか確実にならないと言う事も解りました。

※ このアプリケーションでは、Content-Length を使用していません
※ cURL を使用してアップロードする場合は、以下のオプションを設定して下さい
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Expect:'));

以下は cURL でファイルをアップロードしたところです

Easy_server_post

切りのいいところで受信バイトが変化していますが、必ずこうなるわけではありませんし、クライアントのアプリによっても違います。

関連する記事

ファイルアップロード



以下は通常の呼び出しです。ブラウザから呼び出すと、たびだびサイトのお気に入りのアイコンを読み出そうとしますので注意して下さい。

Vb_tcplistener

ブラウザでダウンロード
VB.net : クライアントが送ったヘッダを表示するだけの HTTPサーバー( TcpListener )
では、スレッドを使ったり表示部分に無駄が多かったりしたので、修正して機能追加しました

ソースコード

VB.net : クライアントが送ったヘッダを表示するだけの HTTPサーバーU


2010/06/23 更新分

※ Expires: -1 でキャッシュ制御( ブラウザ用 )
※ データ表示を受信全体から一気に表示
※ バッファを 1024 から 4096 に変更
※ 使用ポートを第一引数に指定可能
※ サーバーがすべてのネットワークインターフェイスで
※ クライアントによるネットワーク利用を待機する


posted by lightbox at 2010-06-28 20:59 | VB.NET : 通信 | このブログの読者になる | 更新情報をチェックする

2010年06月22日


VB.net : クライアントが送ったヘッダを表示するだけの HTTPサーバー( TcpListener )

最新版はこちらです
VB.net : クライアントが送ったヘッダを表示するだけの HTTPサーバーU

クライアントからサーバーへ送られる送られる生データを確認
したかったので作成しました。コマンドブロンプトなので、CTRL+C で
強制終了しますが、ブラウザから http://127.0.0.1:50000/quit で正式に
終了します

ブラウザでダウンロード
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.Diagnostics
Imports System.Threading

Module MyModule

' ********************************************************
' 
' ********************************************************
Sub Main()

	' スレッド開始   
	Dim ThreadServer As New Thread(AddressOf ThreadEntry)
	ThreadServer.Start() 
	ThreadServer.Join()
	Console.WriteLine("処理は終了しました")

End Sub

Sub ThreadEntry()   

	Dim server As TcpListener = Nothing
	Dim header As String = _
		"HTTP/1.1 200 OK" + ControlChars.CrLf + ControlChars.CrLf + "response:OK"
	Try
		' 50000 番ポート使用
		Dim port As Int32 = 50000
		' ローカル
		Dim localAddr As IPAddress = IPAddress.Parse("127.0.0.1")

		' サーバーのインスタンスを作成
		server = New TcpListener(localAddr, port)
		' サーバー開始
		server.Start()

		' 読み込みバッファ
		Dim bytes(1024) As Byte
		' コマンドワーク
		Dim data As String = Nothing
		Dim bEnd As Boolean = False

		Do While True  

			' 接続待ち
			Console.WriteLine("Waiting ... ")

			' 待機( 接続されると次の行へ )
			Dim client As TcpClient = server.AcceptTcpClient()
			' 受信したので処理開始
			Console.WriteLine("Connected")
			Console.WriteLine("-----------------------------")

			data = ""  

			' 受信用ストリーム   
			Dim stream As NetworkStream = client.GetStream()   

			Dim i As Integer
			Dim cd As Integer = 0

			' **************************************************
			' ストリームからデータを取得( 初回 )
			' bytes : 1024
			' **************************************************
			i = stream.Read(bytes, 0, bytes.Length)

			Do While i <> 0
	
				' 最大1024バイトの処理
				cd = 0
				For idx As Integer = 0 To i - 1
	
					' Windows 改行の1バイト目
					If bytes(idx) = &HD Then
						' 改行数
						cd += 1
					End If
	
					' 改行後の最初
					If cd = 0 Then
						data += _
						 Encoding.ASCII.GetString(bytes, idx, 1)
					End If
	
					' Windows 改行の2バイト目
					If bytes(idx) = &HA And cd = 1 Then

						' 改行区切りでコマンドを取得
						Console.WriteLine("{0}", data)

						Dim Command As String() = data.Split(" ")
						If Command(0) = "GET" Then  
								data = Command(1).Substring(1)
						end if

						' quit で終了
						If data = "quit" Then
							bEnd = True
						End If
	
						' 行単位の処理の為の初期化
						cd = 0
						data = ""
					End If
				Next

				' 受信ヘッダ完了
				If data = "" Then  
					' OK を返す   
					Dim msg As Byte() = _   
					 Encoding.GetEncoding(932).GetBytes( _   
					 header)   
					stream.Write(msg, 0, msg.Length)   
					Exit Do  
				End If  
				' 残っているデータをストリームから取得
				i = stream.Read(bytes, 0, bytes.Length)
	
			Loop

			' 処理終了で接続解除してサービス終了
			client.Close()

			' quit で終了
			If bEnd Then
				Exit Do
			End If

		Loop

	Catch ex As SocketException
		Console.WriteLine("SocketException: {0}", ex)
	Finally
		server.Stop()
	End Try

End Sub

End Module



posted by lightbox at 2010-06-22 00:36 | VB.NET : 通信 | このブログの読者になる | 更新情報をチェックする

2009年05月07日


VB.NET : TKMP.DLL でメール送信

1) TKMP.DLL をダウンロード

2) 参照設定を行う

3) Imports
Imports TKMP.Writer
Imports TKMP.Net

4) ボタンを作成
Private Sub メール送信_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles メール送信.Click

	'------------------------------------------------------
	'サーバー情報
	'------------------------------------------------------
	Dim Server As String = "ユーザID.sakura.ne.jp"
	Dim ServerPort As Integer = 587

	'------------------------------------------------------
	'メール情報の作成
	'------------------------------------------------------
	Dim mail As MailWriter = New MailWriter

	'差出人
	mail.FromAddress = "メールユーザ@ユーザID.sakura.ne.jp"
	'あて先
	mail.ToAddressList.Add("あて先メールアドレス")
	'本文のクラスを作成します
	Dim part As TextPart = New TextPart("本文")
	'送信メールクラスに本文を登録
	mail.MainPart = part

	'相手のメーラーで「差出人」として表示
	mail.Headers.Add("From", "わたし <メールユーザ@ユーザID.sakura.ne.jp>")
	'相手のメーラーで「あて先」として表示されます
	mail.Headers.Add("To", "あなた <あて先メールアドレス>")
	'メールの件名
	mail.Headers.Add("Subject", "タイトル")
	'付加情報など
	mail.Headers.Add("X-Mailer", "TKMP Version 2.0.0")

	'------------------------------------------------------
	'サーバーへ接続
	'------------------------------------------------------
	'SMTPサーバーを利用する場合に認証が必要なときは以下のようにインスタンスを作成します
	Dim logon As AuthLogin = New AuthLogin("認証用ユーザ文字列", "パスワード")
	Dim smtp As SmtpClient = New SmtpClient(Server, ServerPort, logon)

	'接続
	If Not smtp.Connect() Then
		MessageBox.Show("接続に失敗しました。")
		Return
	End If

	'------------------------------------------------------
	'メール送信を開始します
	'------------------------------------------------------
	smtp.SendMail(mail)

	'------------------------------------------------------
	'サーバーから切断します
	'------------------------------------------------------
	smtp.Close()

	MessageBox.Show("メールを送信しました")

End Sub

さくらインターネットでは、「認証用ユーザ文字列」はメールアドレスになります。

関連する記事

VS2010(C#) : TKMP.DLL(3.1.2)を使った、メール送信テンプレート



タグ:メール VB
posted by lightbox at 2009-05-07 15:21 | VB.NET : 通信 | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します


Windows
container 終わり

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

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
PHP正規表現チェッカー
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり