* login.php

<?php

function build_query($a) {
    $m = [];
    array_walk($a, function($item, $key) use (&$m) {
        $m[] = $key.'='.urlencode($item);
    });
    return implode('&', $m);
}
function extract_http_body($content,$sep = "\r\n\r\n") {
    $body = strstr($content, $sep);
    return rtrim( substr($body, strlen($sep)) );
}

$ch = curl_init();

$headers = array(
    "X-Requested-With: XMLHttpRequest",
    "Content-Type: application/x-www-form-urlencoded",
);

$a = [
    "username" => '13001919???',
	// "username" => 'nosuchuser',
    "userpwd" => 'putongj3',
	'luckdrawcode' => '',
	'specialcode' =>'undefined'
];
$postdata = build_query($a);

array_push($headers, sprintf("Content-Length: %d", strlen($postdata)));

curl_setopt_array($ch, [
    // CURLOPT_URL => 'http://172.16.0.224:8060/v1/login',
	CURLOPT_URL => 'http://192.168.4.157:8060/v1/login',
    CURLOPT_HEADER => 1,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_POST => 1,
    CURLOPT_BINARYTRANSFER => 1,
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_POSTFIELDS => $postdata,
	CURLOPT_CONNECTTIMEOUT => 3,
]);

$data = curl_exec($ch);

if (curl_errno($ch)) {
	$msg = curl_error($ch);
	printf("%s\n", $msg);
} else {
	printf("%s\n", $data);
	
	// write token  o.data.token
    $body = extract_http_body($data, "\r\n\r\n");
    // printf("body=[%s]\n", $body);
    $json = json_decode($body, false);
    if ($json) {
        file_put_contents("token.txt", $json->data->token);
    }

}
curl_close($ch);

* run:

$ php login.php

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache, no-store, max-age=0, must-revalidate, value
Content-Type: application/json; charset=utf-8
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Last-Modified: Tue, 05 Mar 2019 08:03:51 GMT
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-Request-Id: 1af4693d-4b92-400b-8e85-f2b550529e61
X-Xss-Protection: 1; mode=block
Date: Tue, 05 Mar 2019 08:03:51 GMT
Content-Length: 221

{"code":0,"message":"OK","data":{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTE3NzMwMzEsImlkIjoyOTY1MTYwNywibmJmIjoxNTUxNzczMDMxLCJ1c2VybmFtZSI6InB1dG9uZ2ozIn0.z1pzIFQ1FUF-8W2ZX9aDWbMjL9BOv5CHy1vKLvKKBeQ"}}

$ cat token.txt

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTE3NzMwMzEsImlkIjoyOTY1MTYwNywibmJmIjoxNTUxNzczMDMxLCJ1c2VybmFtZSI6InB1dG9uZ2ozIn0.z1pzIFQ1FUF-8W2ZX9aDWbMjL9BOv5CHy1vKLvKKBeQ

 

2. 提取httpheader

* indexOf.php

<?php
ini_set("display_errors", 1);
error_reporting(E_ALL);

$s = <<<EOF
HTTP/1.1 301 Moved Permanently
Date: Fri, 30 Aug 2019 06:41:52 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: https://www.kancloud.cn/
X-Via-JSL: 0b3d685,-
Set-Cookie: __jsluid_h=6ef203be13858b5f3d31576bb41f4640; max-age=31536000; path=/; HttpOnly
X-Cache: error

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>\r\n
EOF;


function extractHttpHeader($s, $delim = "\r\n\r\n") {
    $n = strlen($delim);
    $j = 0;
    for ($i = 0; isset($s[$i]) && $j < $n; $i++) {
        if ($delim[$j] === $s[$i]) {
            $j++;
        } else {
            $j = 0;
        }
    }
    return substr($s, 0, $i-$n);
}

function getHeaderAssoc($header) {
    $a = explode("\r\n", $header);
    $assoc = [];
    for ($i = 1; $i < count($a); $i++) {
        $b = explode(": ", $a[$i]);
        $assoc[ $b[0] ] = $b[1];
    }
    return $assoc;
}


$header = extractHttpHeader($s);
$assoc = getHeaderAssoc($header);
var_dump($assoc);

运行效果如下:

$ php indexOf.php
array(8) {
  ["Date"]=>
  string(29) "Fri, 30 Aug 2019 06:41:52 GMT"
  ["Content-Type"]=>
  string(9) "text/html"
  ["Content-Length"]=>
  string(3) "178"
  ["Connection"]=>
  string(10) "keep-alive"
  ["Location"]=>
  string(24) "https://www.kancloud.cn/"
  ["X-Via-JSL"]=>
  string(9) "0b3d685,-"
  ["Set-Cookie"]=>
  string(79) "__jsluid_h=6ef203be13858b5f3d31576bb41f4640; max-age=31536000; path=/; HttpOnly"
  ["X-Cache"]=>
  string(5) "error"
}

 

--------------------------------------------------------------

windows share:

sudo mount -t cifs //ET-201808271128/gocode/src/gitlab.easytech-main.com/webdev/ucenter/src /mnt -o username=mingzhanghui,password=XXX,vers=2.0,rw,uid=1000,gid=1000,dir_mode=0777,file_mode=0777