GitHub学生包新成员里面有一个EducationHost,虚拟主机产品,源自英国,速度就很一般了,把GoAgent翻出来重新搞一搞.
大致配置参数看图就好了.
主要适配修改.
- 把PHP5函数往PHP7挪了一下,能用就行,懒得管了.
- 强制HTTP 1.1,不然会访问不了某些知名网站.
- 密码什么的用途不大,特征反正都很明显.
放置一个PHP脚本到虚拟主机的根目录,名字为index.php,打开后显示白页就算成功了.
<?php
$content_type = '';
$content_body = '';
function decode_request($data) {
list($headers_length) = array_values(unpack('n', substr($data, 0, 2)));
$headers_data = gzinflate(substr($data, 2, $headers_length));
$body = substr($data, 2 + intval($headers_length));
$lines = explode("
", $headers_data);
$request_line_items = explode(" ", array_shift($lines));
$method = $request_line_items[0];
$url = $request_line_items[1];
$headers = array();
$kwargs = array();
$kwargs_prefix = 'X-URLFETCH-';
foreach ($lines as $line) {
if (!$line) continue;
$pair = explode(':', $line, 2);
$key = $pair[0];
$value = trim($pair[1]);
if (stripos($key, $kwargs_prefix) === 0) {
$kwargs[strtolower(substr($key, strlen($kwargs_prefix))) ] = $value;
} else if ($key) {
$key = join('-', array_map('ucfirst', explode('-', $key)));
$headers[$key] = $value;
}
}
if (isset($headers['Content-Encoding'])) {
if ($headers['Content-Encoding'] == 'deflate') {
$body = gzinflate($body);
$headers['Content-Length'] = strval(strlen($body));
unset($headers['Content-Encoding']);
}
}
return array(
$method,
$url,
$headers,
$kwargs,
$body
);
}
function echo_content($content) {
global $content_type;
if ($content_type == 'image/gif') {
echo $content ^ str_repeat("1", strlen($content));
} else {
echo $content;
}
}
function curl_header_function($ch, $header) {
global $content_body, $content_type;
$pos = strpos($header, ':');
if ($pos == false) {
$content_body.= $header;
} else {
$key = join('-', array_map('ucfirst', explode('-', substr($header, 0, $pos))));
if ($key != 'Transfer-Encoding') {
$content_body.= $key . substr($header, $pos);
}
}
if (preg_match('@^Content-Type: ?(audio/|image/|video/|application/octet-stream)@i', $header)) {
$content_type = 'image/x-png';
}
if (!trim($header)) {
header('Content-Type: ' . $content_type);
}
return strlen($header);
}
function curl_write_function($ch, $content) {
global $content_body;
if ($content_body) {
echo_content($content_body);
$content_body = '';
}
echo_content($content);
return strlen($content);
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
list($method, $url, $headers, $kwargs, $body) = @decode_request(@file_get_contents('php://input'));
if ($body) {
$headers['Content-Length'] = strval(strlen($body));
}
if (isset($headers['Connection'])) {
$headers['Connection'] = 'close';
}
$header_array = array();
foreach ($headers as $key => $value) {
$header_array[] = join('-', array_map('ucfirst', explode('-', $key))) . ': ' . $value;
}
$curl_opt = array();
switch (strtoupper($method)) {
case 'HEAD':
$curl_opt[CURLOPT_NOBODY] = true;
break;
case 'GET':
break;
case 'POST':
$curl_opt[CURLOPT_POST] = true;
$curl_opt[CURLOPT_POSTFIELDS] = $body;
break;
case 'PUT':
case 'DELETE':
$curl_opt[CURLOPT_CUSTOMREQUEST] = $method;
$curl_opt[CURLOPT_POSTFIELDS] = $body;
break;
default:
exit(0);
}
$curl_opt[CURLOPT_HTTPHEADER] = $header_array;
$curl_opt[CURLOPT_RETURNTRANSFER] = true;
$curl_opt[CURLOPT_BINARYTRANSFER] = true;
$curl_opt[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_1_1;
$curl_opt[CURLOPT_HEADER] = false;
$curl_opt[CURLOPT_HEADERFUNCTION] = 'curl_header_function';
$curl_opt[CURLOPT_WRITEFUNCTION] = 'curl_write_function';
$curl_opt[CURLOPT_FAILONERROR] = false;
$curl_opt[CURLOPT_FOLLOWLOCATION] = false;
$curl_opt[CURLOPT_CONNECTTIMEOUT] = 30;
$curl_opt[CURLOPT_TIMEOUT] = 30;
$curl_opt[CURLOPT_SSL_VERIFYPEER] = false;
$curl_opt[CURLOPT_SSL_VERIFYHOST] = false;
$ch = curl_init($url);
curl_setopt_array($ch, $curl_opt);
$ret = curl_exec($ch);
$errno = curl_errno($ch);
if ($GLOBALS['content_body']) {
echo_content($GLOBALS['__content__']);
}
curl_close($ch);
}else{
}
下载改装版的GoAgent.
https://github.com/bclswl0827/goagent-php-bclswl/archive/download.zip
修改php字段.(密码无所谓,1开头后面随便写)
关闭autodetect
关闭GAE.
以管理员启动,就可以用了,但是,貌似Chrome有什么限制,推荐Firefox.
关于路由,不是绕地球一圈,已经谢天谢地.
至于关于速度问题...
可能流量才是更大的问题吧,英国机房速度肯定惨不忍睹的了...