public static function doRequest(TaskRequest $request, $taskType) { if ($request->isDelay()) { return null; } output($request->name, $request->id); $httpRequest = HttpRequest::create(); try { if ($request->authorization) { $httpRequest->auth($request->authorization['type'], $request->authorization['user'], $request->authorization['password']); } switch ($request->timeout[0]) { case 's': $httpRequest->timeout($request->timeout[1]); break; case 'ms': $httpRequest->timeoutMs($request->timeout[1]); break; } if ($request->proxy) { $httpRequest->proxy($request->proxy['address'], $request->proxy['port'], $request->proxy['type'], $request->proxy['tunnel']); if (!empty($request->proxy['auth'])) { $httpRequest->proxyAuth($request->proxy['auth']['user'], $request->proxy['auth']['password'], $request->proxy['auth']['method']); } } $httpResponse = $httpRequest->send($request->method, $request->url, $request->data, $request->headers); output($httpResponse->curl_info, $httpResponse->code); } catch (GlobalException $ex) { output($ex->getMessage()); } // 释放内存 $httpRequest = null; unset($httpRequest); }
/** * 解析生成 Task\Request 对象 * * @param array $params * @return \Ws\Http\Automated\Task\Request */ public static function parse($params = []) { $obj = new Request(); $obj->id = $params['id']; $obj->type = (int) $params['type']; switch ($obj->type) { case 1: $obj->name = $params['name']; $obj->url = $params['url']; $obj->method = strtoupper(trim($params['method'])); $obj->setAuthorization($params['authorization']); $obj->setProxy($params['proxy']); $obj->setTimeout(empty($params['timeout']) ? null : $params['timeout']); // 设置默认请求头 // $obj->headers['Content-Type'] = 'text/plain'; // 处理请求数据 switch ($obj->method) { // 这两种类型无需对参数做处理 case Method::GET: case Method::HEAD: foreach ((array) $params['data'] as $item) { if ('text' == $item['type']) { $obj->data[$item['key']] = $item['value']; } else { // 暂未实现 } } break; // 只有 PUT,POST,DELETE,OPTIONS,PATCH 支持内容体 // 只有 PUT,POST,DELETE,OPTIONS,PATCH 支持内容体 case Method::POST: case Method::PUT: case Method::DELETE: case Method::OPTIONS: $dataMode = strtolower(trim($params['dataMode'])); switch ($dataMode) { case 'params': foreach ((array) $params['data'] as $item) { if ('text' == $item['type']) { $obj->data[$item['key']] = $item['value']; } else { if ('file' == $item['type']) { $obj->headers['Content-Type'] = 'multipart/form-data'; // file 内容暂不支持 } } } break; case 'urlencoded': $obj->headers['Content-Type'] = 'application/x-www-form-urlencoded'; foreach ((array) $params['data'] as $item) { if ('text' == $item['type']) { $obj->data[$item['key']] = $item['value']; } } break; case 'raw-json': $obj->headers['Content-Type'] = 'application/json'; $obj->data = $params['data']['value']; break; case 'raw-xml': $obj->headers['Content-Type'] = 'application/xml'; $obj->data = $params['data']['value']; break; case 'raw-textxml': $obj->headers['Content-Type'] = 'text/xml'; $obj->data = $params['data']['value']; break; case 'raw-html': $obj->headers['Content-Type'] = 'text/html'; $obj->data = $params['data']['value']; break; case 'raw-text': $obj->headers['Content-Type'] = 'text/plain'; $obj->data = $params['data']['value']; break; case 'raw-binary': default: throw new Exception("Not supported request `dataMode`: {$dataMode}"); break; } break; default: throw new Exception("Not supported request `method`: {$obj->method}"); break; } // 设置请求头 foreach ((array) $params['headers'] as $key => $val) { $obj->headers[$key] = $val; } // 设置断言规则 // 设置变量提取规则 break; case 2: $obj->delay = (int) $params['delay']; break; default: throw new Exception("Unknown request `type`: {$obj->type}"); break; } return $obj; }