Esempio n. 1
0
 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);
 }
Esempio n. 2
0
 /**
  * 解析生成 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;
 }