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 Tryurl_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の禁止ワード一括登録
|
【VB.NET : 通信の最新記事】
- VB.net(2010) : COMの Msxml2.ServerXMLHTTP を使用して WEBアプリにバイナリデータを POST する
- VB.net : TKFP.DLL 1.4.3 を使って FTPS でファイル(フォルダ)の一覧を取得する
- VB.net : COMの Msxml2.ServerXMLHTTP を使用して Google のURL短縮サービスを使用する( JSON )
- VB.net : COMの Msxml2.ServerXMLHTTP を使用して URL短縮サービス[bit.ly] を使用する( XML と TEXT )
- VB.net : COMの Msxml2.ServerXMLHTTP を使用して URL短縮サービス[p.tl] を使用する( JSON )
- VB.net : COMの Msxml2.ServerXMLHTTP を使用して http 通信を行う
- VB.net : IPアドレスを IPv4 と IPv6 に区別して取得する
- Json.NET を使用して JSON 文字列を VB.net で使用する( 逆シリアライズ )
- VB.net : クライアントが送ったヘッダを表示するだけの HTTPサーバーU
- VB.net : クライアントが送ったヘッダを表示するだけの HTTPサーバー( TcpListener )
- VB.NET : TKMP.DLL でメール送信