読者です 読者をやめる 読者になる 読者になる

Haruyuki Mohri

毛利春幸のブログです。

TNetHTTPClient, TNetHTTPRequest Post

TNetHTTPClient, TNetHTTPRequest Post

dfmファイル

object Form1: TForm1
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 8
    Top = 8
    Width = 249
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Memo1: TMemo
    Lines.Strings = (
      'Memo1')
    TabOrder = 1
  end
  object Panel1: TPanel
    Caption = 'Panel1'
    ShowCaption = False
    TabOrder = 2
    Visible = False
    object ActivityIndicator1: TActivityIndicator
      Left = 96
      Top = 49
    end
  end
end

cppファイル

#include <System.Net.HttpClient.hpp>
#include <System.Net.HttpClientComponent.hpp>
#include <System.Net.URLClient.hpp>

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ActivityIndicator1->Animate = True;
    Button1->Enabled = False;
    Panel1->Top = 0;
    Panel1->Left = 0;
    Panel1->Visible = True;
    TThread::CreateAnonymousThread([this](){
        Sleep(100);
        std::shared_ptr<TMultipartFormData> md = std::shared_ptr<TMultipartFormData>(new TMultipartFormData(NULL));
        std::shared_ptr<TNetHTTPClient> ncl = std::shared_ptr<TNetHTTPClient>(new TNetHTTPClient(NULL) );
        std::shared_ptr<TNetHTTPRequest> nreq = std::shared_ptr<TNetHTTPRequest>(new TNetHTTPRequest(NULL) );
        try
        {
            try
            {
                nreq->Client = ncl.get();

                //POSTで送りたい内容
                md->AddField("hoge1", "aho1");
                md->AddField("hoge2", "aho2");

                //カスタムぽいヘッダーを作る
                TNetHeaders h;
                h.Length = 1;
                h[0] = TNameValuePair("Referer","http://aaa.co.jp");

                //UserAgentを入れる
                ncl->UserAgent = "Mozilla/5.0";

                _di_IHTTPResponse resp;

                //Post接続
                resp = nreq->Post("http://docwiki.embarcadero.com/Libraries/Berlin/en/Main_Page", md.get(), nullptr, h);

                TThread::Synchronize(TThread::CurrentThread, [this, resp](){
                    Memo1->Lines->Append(
                        resp->ContentAsString(TEncoding::UTF8) //Response内容
                        );
                });
            }
            catch(Exception &ex)
            {
                //Errorの時の処理
            }
        }
        __finally
        {

            TThread::Synchronize(TThread::CurrentThread, [this](){
                Panel1->Visible = False;
                ActivityIndicator1->Animate = False;
                Button1->Enabled = True;
            });
        }

    })->Start();


}

f:id:mojeld:20160615192340j:plain

phpで(TSV)タブ区切りファイルを読む

入力タブ区切りファイル

a \t b \t c \t d

phpコード

<?php
  $file_ = new SplFileObject("~/test.tsv", 'r');
  while (!$file_->eof()) {
    $line_= $file_->fgetcsv("\t");
    if (! empty($line_[0]))
    {
       echo $line_[0];
       echo $line_[1];
       echo $line_[2];
       echo $line_[3] . "\n";
    }
  }
?>

f:id:mojeld:20160517195428j:plain

Amazon Linux(EC2)のUTC時間を日本時間(JST)に変更

zoneinfo/Japanファイルをlocaltimeにコピーする

mv /etc/localtime /etc/localtime.1
cp /usr/share/zoneinfo/Japan /etc/localtime

これで再起動しなくても日本時間(JST)になりました

Ubuntu 15.10に Firebird-3.0.0をインストール

Firebird-3.0ダウンロード先

firebirdsql.org/

#Firebird-3.0.0.32483-0.amd64.tar.gzをダウンロードする
wget https://sourceforge.net/projects/firebird/files/firebird-linux-amd64/3.0-Release/Firebird-3.0.0.32483-0.amd64.tar.gz

Firebird-3.0.0.32483-0.amd64.tar.gzを解凍してinstall.sh

tar xzvf Firebird-3.0.0.32483-0.amd64.tar.gz
cd Firebird-3.0.0.32483-0.amd64/
sudo ./install.sh

f:id:mojeld:20160510120317j:plain

Please install required library 'tommath' before firebird, after it repeat firebird install
Install aborted: The command ./scripts/preinstall.sh 
                 failed with error code 1

tommathが無いとエラーが出ます

libtommath-devインストール

sudo apt-get install libtommath-dev

install.shを実行

Press Enter to start installation or ^C to abort
Extracting install data
Please enter new password for SYSDBA user:********   
Install completed
#成功しました。

/opt/firebird/binに いろいろ入っています。

./gsec -user SYSDBA -password ***
GSEC> modify SYSDBA -pw ******
GSEC> quit
#パスワードを変更

データベースを作成する

sudo /opt/firebird/bin/isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> create database '/home/test.fb'
CON> user 'sysdba' password '***';
#テーブルを作成
SQL> create table t_abc (i1 int);
#テーブルが作れたか確認する
SQL> show tables;
       T_ABC                           
SQL> quit;
#t_abcテーブルが出来ていた

プロセスが動いているのか確認

sudo ps -ef | grep firebird
firebird 22137     1  0 11:12 ?        00:00:00 /opt/firebird/bin/fbguard -pidfile /var/run/firebird/default.pid -daemon -forever
firebird 22138 22137  0 11:12 ?        00:00:00 /opt/firebird/bin/firebird

FireDACで接続

f:id:mojeld:20160510135531j:plain

================================
接続定義パラメータ
================================
Database=/home/test.fb
User_Name=SYSDBA
Password=*****
Protocol=TCPIP
Server=0.0.0.0
Port=3050
DriverID=fB
procedure TForm1.Button1Click(Sender: TObject);
var
  stTemp: String;
begin
  FDConnection1.Connected := True;

  FDQuery1.SQL.Text := 'select * from t_abc';
  FDQuery1.Active := True;
  while not FDQuery1.Eof do
  begin
    stTemp  := FDQuery1.FieldByName('i1').AsString;
    FDQuery1.Next;
  end;
  Caption := stTemp;
  FDQuery1.Active := False;
end;

[fbclient.dll or fbembed.dll] 読込エラーの場合

[FireDAC][Phys][FB]-314. ベンダ ライブラリ [fbclient.dll or fbembed.dll] を読み込めません。指定されたモジュールが見つかりません。
ヒント: PATH またはアプリケーションの EXE ディレクトリに含まれているか、x86 ビットであるかを確認してください。.

C:\Users\Public\Documents\Embarcadero\Studio\FireDAC\FDDrivers.ini

[FB]
VendorLib=C:\Program Files (x86)\Firebird-3\fbclient.dll

追記します

参考

qiita.com
Firebird 3.0 alpha 2 installation (Debian 7.3 x64) | TuIT http://docwiki.embarcadero.com/RADStudio/Seattle/ja/Firebird_への接続(FireDAC)

REST response is JSON. Convert it to TSV.

JSON to TSV