それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

パスワードは「8文字」とかいうイオン銀行

イオンカードが届いたのでユーザー登録して焦った。

パスワードは「8文字」

パスワードを入力しても入力しても、登録されないのでオカシイと思って、よく読むとパスワードは8文字限定

  1. 8文字未満は不可(あたりまえ)
  2. 9文字以上も不可(えええ)


というわけで、さすがにコレはないと思ったんですね。

しかも、input type=password に maxlength が設定されてないので、幾らでも入力できてしまう。


イオン銀行のシステムとはお付き合いを避けようと思った、戻るボタン禁止だし。。。




銀行系のシステム開発経験って履歴書には役に立つけど、現実社会では役に立たんなぁ。

.htaccess でHTTPヘッダを改変する方法

とあるサイトの.htaccessを見せてもらって、気づいたんですが、.htaccessでヘッダの上書きが出来るんですね。

文字コードを強制EUCにするヘッダ

AddType "text/html ; charset=EUC-JP " .html

こう書くことで、 html ファイルのHTTPヘッダが強制的に文字コードEUCを吐き出します。
便利なのか不便なのかわからないけど、使いように依っては便利なんじゃないかと思います。

たとえば、jsファイルを全てtext/plainにしてみる

AddType text/plain .js

ブラウザに強制的に認識させる?

文字コード設定がオカシイ時に強制的にブラウザに認識させるには便利なのかもしれませんね。
あと、拡張子を独自で作った時とかにも使えそうです。

PHPでHTTP POSTされたJSON本文のbodyを受け取る方法

JSONを本文にPOSTリクエストを投げることが増えてきた

HTTP/1.1
Content-Type:application/json   ###<-- jsonになっている

で直接JSONを本文に投げてくるクライアントが増えてきていることを知りましました。

HTTPのPOSTと言えば、form urlencodedですが、JSONを本文に入れることがあります。

HTTPヘッダサンプル(JSON版)

HTTP/1.1
User-Agent: Opera/9.80 (Macintosh; Intel Mac OS X 10.8.4) Presto
Host: example.com
Accept-Encoding: gzip, deflate
Cache-Control: no-cache
Connection: Keep-Alive
Content-Type:application/json   ###<-- jsonになっている

{a=1,b=2}

通例であれば、application/x-www-form-urlencodedです

通常であれば、以下のように、key=value&key2=valueです。

HTTP/1.1
User-Agent: Opera/9.80 (Macintosh; Intel Mac OS X 10.8.4) Presto
Host: example.com
Accept-Encoding: gzip, deflate
Cache-Control: no-cache
Connection: Keep-Alive
Content-Type:application/x-www-form-urlencoded

name=a%3D1  ### => {a=1,b=2}をURLエンコードしたもの

jsonを本文に入れる

通常のようにURLエンコードせずに、直接JSON文字列をサーバーに送ります。

Content-Type:application/json   ###<-- jsonになっている

{a=1,b=2}

form urlencodedではなく、JSONを本文に入れて送るのでした。

phpだと$_POST変数が空っぽ

Content-Type:application/json送信されると、key=valueが無いので当然ながら、$_POST変数が空っぽになります。

送られたJSON本文の受け取り方

そこで、HTTPリクエスト本文にphp://input の fopen wrapperを使って直接ストリームにアクセスを試みます

<?php

$json_string = file_get_contents('php://input'); ##今回のキモ

echo $json_string;
$obj = json_decode($json_string);
var_dump($obj);

とすれば受け取ることができます。


簡単ですね。こうすれば、POST変数名に縛られなくて便利ですね。

2017-03-08 追記

node の fetch や python の urllib.request みたいに、APIデバッグが面倒な子たちは、サンプルサーバーを作って、サーバー側でJSONを受け取れてるか見て上げる必要がる。

そこで次のような info_json.php を作って、正しくjson送信できてるかチェック用のリクエスト受付を作っておく


```php
$_BODY,
'error' => 'invalid json'
];
}
$_SERVER['_BODY'] = $_BODY;
}
$obj = [
'_COOKIE' => $_COOKIE,
'_SERVER' => $_SERVER,
'_GET' => $_GET,
'_POST' => $_POST,
'_BODY' => $_BODY,
];



echo json_encode( $obj );

```
こんな風にリクエストを次々ほうれば、問題が減る。。

f:id:takuya_1st:20170308020523p:plain