{"id":37234369,"url":"https://github.com/webguosai/http-client-v2","last_synced_at":"2026-01-15T03:58:47.836Z","repository":{"id":304962652,"uuid":"1020657220","full_name":"webguosai/http-client-v2","owner":"webguosai","description":"🔥🔥🔥HTTP 客户端","archived":false,"fork":false,"pushed_at":"2025-08-02T10:45:45.000Z","size":53,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-19T23:42:23.499Z","etag":null,"topics":["guzzle","http","httpclient"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/webguosai.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-16T07:45:22.000Z","updated_at":"2025-08-02T10:45:48.000Z","dependencies_parsed_at":"2025-07-17T16:59:58.056Z","dependency_job_id":"0e694760-93f1-49ef-a658-a7616cf97c88","html_url":"https://github.com/webguosai/http-client-v2","commit_stats":null,"previous_names":["webguosai/http-client-v2"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/webguosai/http-client-v2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webguosai%2Fhttp-client-v2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webguosai%2Fhttp-client-v2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webguosai%2Fhttp-client-v2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webguosai%2Fhttp-client-v2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/webguosai","download_url":"https://codeload.github.com/webguosai/http-client-v2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webguosai%2Fhttp-client-v2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28419274,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T10:47:48.104Z","status":"ssl_error","status_checked_at":"2026-01-14T10:46:19.031Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["guzzle","http","httpclient"],"created_at":"2026-01-15T03:58:47.332Z","updated_at":"2026-01-15T03:58:47.822Z","avatar_url":"https://github.com/webguosai.png","language":"PHP","readme":"\u003ch1 align=\"center\"\u003ehttp client v2\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://packagist.org/packages/webguosai/http-client-v2\"\u003e\u003cimg src=\"https://poser.pugx.org/webguosai/http-client-v2/v/stable\" alt=\"Latest Stable Version\"\u003e\u003c/a\u003e\n\u003ca href=\"https://packagist.org/packages/webguosai/http-client-v2\"\u003e\u003cimg src=\"https://poser.pugx.org/webguosai/http-client-v2/downloads\" alt=\"Total Downloads\"\u003e\u003c/a\u003e\n\u003ca href=\"https://packagist.org/packages/webguosai/http-client-v2\"\u003e\u003cimg src=\"https://poser.pugx.org/webguosai/http-client-v2/v/unstable\" alt=\"Latest Unstable Version\"\u003e\u003c/a\u003e\n\u003ca href=\"https://packagist.org/packages/webguosai/http-client-v2\"\u003e\u003cimg src=\"https://poser.pugx.org/webguosai/http-client-v2/license\" alt=\"License\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## 运行环境\n\n- php \u003e= 7.2\n- composer\n\n## 安装\n\n```Shell\ncomposer require webguosai/http-client-v2 -vvv\n```\n\n## 使用\n### 初始化\n```php\n$options = [\n    //超时 (单位秒，-1表示不超时)\n    'timeout' =\u003e 3.0,\n\n    // 代理ip\n    // http：127.0.0.1:9527 或 http://127.0.0.1:9527\n    // https：https://127.0.0.1:9527\n    // socks5：socks5://127.0.0.1:9527\n    'proxy' =\u003e '',\n\n    // 重定向 (-1表示：无限制，默认0表示不重定向)\n    'redirect' =\u003e 0,\n\n    //cookie自动保存路径\n    'cookieJarFile' =\u003e 'cookie.txt',\n];\n\n// 实例化\n$http = new \\Webguosai\\HttpClient\\HttpClient($options);\n\n// 工厂模式\n$http = \\Webguosai\\HttpClient\\HttpClient::factory([\n    'timeout' =\u003e 3,\n])\n```\n\n### 链式\n\n```php\n$http-\u003etimeout(5.5)-\u003eredirect(5)-\u003eproxy('socks5://127.0.0.1:9527');\n```\n\n### 请求\n\n```php\n$url = 'https://httpbin.org';\n$data = ['data' =\u003e '111', 'data2' =\u003e '222'];\n$headers = [\n    'User-Agent' =\u003e 'http-client browser',\n    'cookie' =\u003e 'login=true'\n];\n\n// 请求方式\n$response = $http-\u003erequest($url, $method, $data, $headers);\n\n$response = $http-\u003eget($url, $query, $headers);\n$response = $http-\u003epost($url, $data, $headers);\n$response = $http-\u003eput($url, $data, $headers);\n$response = $http-\u003epatch($url, $data, $headers);\n$response = $http-\u003edelete($url, $data, $headers);\n$response = $http-\u003ehead($url, $data, $headers);\n$response = $http-\u003eoptions($url, $data, $headers);\n```\n\n### 响应\n```php\n[$status, $throw] = $response-\u003eok(); //\n$response-\u003egetRequestHeaders(); // 请求头\n$response-\u003egetHeaders(); // 响应头\n$response-\u003egetBody(); // body\n$response-\u003egetStatusCode(); // http状态码\n$response-\u003egetInfo(); // 其它信息\n$response-\u003egetResponse(); // 获取响应的报文信息(包含header头、body)\n$response-\u003ejson(); // json\n$response-\u003exml(); // xml\n$response-\u003eok();// curl_code = 0 \u0026\u0026 http_code = 200\n$response-\u003egetCurlErrorCode(); // 错误信息\n```\n\n### data 传值方式\n```php\n// multipart/form-data\n$data = ['data' =\u003e '111', 'data2' =\u003e '222'];\n\n// application/x-www-form-urlencoded\n$data = http_build_query($data); \n\n// application/json\n$data = json_encode($data); \n\n// 文件上传 $_FILES['file'] 接收\n$data = [\n    'file' =\u003e new \\CURLFile('1.jpg'),\n];\n\n$response = $http-\u003epost($url, $data);\n```\n\n### headers 传值方式\n```php\n// 数组传递 \n$headers = [\n    'User-Agent: chrome',\n    'User-Agent' =\u003e 'chrome',\n];\n\n// 纯字符串 (一般为从浏览器复制)\n$headers = 'User-Agent: chrome\nReferer: https://www.x.com\nCookie: cookie=6666666';\n\n$response = $http-\u003epost($url, $data, $headers);\n```\n\n## 实操\n\n```php\n$http = \\Webguosai\\HttpClient\\HttpClient::factory([\n    'timeout' =\u003e 3,\n])\n$response = $http-\u003eget('https://www.baidu.com');\n\n/** @var $throw \\Webguosai\\HttpClient\\Exception\\RequestException */\n[$status, $throw] = $response-\u003eok();\nif ($status) {\n    var_dump($response-\u003egetBody()); // body\n    var_dump($response-\u003ejson());\n    var_dump($response-\u003exml());\n} else {\n    var_dump($throw-\u003egetMessage()); // 错误内容\n    var_dump($throw-\u003egetRequestArgs()); // 请求前的传参\n    var_dump($throw-\u003egetContext()); // 上下文 信息\n    var_dump($throw-\u003egetErrorType()); // 错误类型\n    var_dump($throw-\u003egetHttpStatusCode()); // http 状态码\n    var_dump($throw-\u003egetCurlErrorCode()); // curl 错误码\n}\n```\n\n## 异常\n\n- ok\n\n```php\n// 自定义异常错误\n[$status, $throw] = $response-\u003eok(function (\\Webguosai\\HttpClient\\Contract\\ResponseInterface $response) {\n    if ($response-\u003egetBody() !== 'hello world') {\n        throw new \\Webguosai\\HttpClient\\Exception\\RequestException('自定义异常错误', $response);\n    }\n});\nif ($status) {\n    var_dump($response-\u003ejson());\n} else {\n    var_dump($throw-\u003egetMessage()); // 错误内容\n    var_dump($throw-\u003egetRequestArgs()); // 请求前的传参\n    var_dump($throw-\u003egetContext()); // 上下文 信息\n    var_dump($throw-\u003egetErrorType()); // 错误类型\n    var_dump($throw-\u003egetHttpStatusCode()); // http 状态码\n    var_dump($throw-\u003egetCurlErrorCode()); // curl 错误码\n}\n```\n\n- throw\n\n```php\ntry {\n    $response-\u003ethrow();\n    var_dump($response-\u003ejson());\n    \n    // 自定义异常错误\n    if ($response-\u003egetBody() !== 'hello world') {\n        throw new \\Webguosai\\HttpClient\\Exception\\RequestException('自定义异常错误', $response);\n    }\n} catch (\\Webguosai\\HttpClient\\Exception\\RequestException $e) {\n    var_dump($e-\u003egetMessage()); // 错误内容\n    var_dump($e-\u003egetRequestArgs()); // 请求前的传参\n    var_dump($e-\u003egetContext()); // 上下文 信息\n    var_dump($e-\u003egetErrorType()); // 错误类型\n    var_dump($e-\u003egetHttpStatusCode()); // http 状态码\n    var_dump($e-\u003egetCurlErrorCode()); // curl 错误码\n}\n```\n\n## License\n\nMIT\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwebguosai%2Fhttp-client-v2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwebguosai%2Fhttp-client-v2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwebguosai%2Fhttp-client-v2/lists"}