GET/POST教程

常用语言GET/POST教程

PHP GET/POST 教程
<?php /*接口盒子:提供各种免费API接口,集群服务器保障服务稳定。 官网:https://www.apihz.cn/ ,服务QQ群:500700444 ,服务QQ号:2813858888 PHP通用GET/POST请求教程 */ //-----------------配置参数----------------- $config = array( 'url' => 'https://cn.apihz.cn/api/time/getapi.php', //请求地址,替换为实际地址 'type' => 1, // 请求方式 0=GET,1=POST //如果有参数内容较大,必须使用POST。 'data' => array( //请求参数 'id' => '88888888',//开发者ID 'key' => '88888888',//开发者KEY 'type' => 20, // 其他参数按格式增加 ), // curl配置参数 'curl_options' => array( // 超时设置 'connect_timeout' => 10, // 连接超时时间(秒) 'timeout' => 30, // 整体超时时间(秒) // SSL设置 'ssl_verify_peer' => false, // 是否验证对等证书 'ssl_verify_host' => false, // 是否验证主机名 // 其他设置 'follow_location' => true, // 是否跟随重定向 'return_transfer' => true, // 是否返回结果而不直接输出 'encoding' => '', // 响应的编码格式,如gzip // 代理设置 'proxy' => '', // 代理服务器地址,如'http://127.0.0.1:8080' 'proxy_type' => CURLPROXY_HTTP, // 代理类型 'proxy_auth' => array( // 代理认证 'username' => '', 'password' => '' ), ), // 请求头 'headers' => array( 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.97 Safari/537.36', 'null' => null,//其他请求头按格式增加 ), // Cookie 'cookie' => '', // 其他 'user_agent' => '', // 单独设置User-Agent,优先级高于headers中的 ); //-----------------执行请求----------------- $res = getpost($config);//返回内容 $datas = json_decode($res, true);//对返回内容进行JSON解析 if (json_last_error() === JSON_ERROR_NONE) { if($datas['code'] == 200){ echo $datas['msg'];//返回状态码请求成功,取出对应的数据,执行自己的业务逻辑。 }else{ echo $datas['msg'];//返回状态码请求失败,取出对应的数据,执行自己的业务逻辑。 } }else{ echo json_encode(array( 'code' => 400, 'msg' => '解析JSON返回数据失败!' ), JSON_UNESCAPED_UNICODE); } //-----------------封装函数----------------- function getpost($config) { // 验证必要参数 if (empty($config['url'])) { return json_encode(array( 'code' => 400, 'msg' => '请求地址不能为空!' ), JSON_UNESCAPED_UNICODE); } // 初始化cURL $curl = curl_init(); if ($curl === false) { return json_encode(array( 'code' => 400, 'msg' => '初始化失败,请重试!' ), JSON_UNESCAPED_UNICODE); } // 设置请求地址 $url = $config['url']; // 处理请求参数 if (!empty($config['data']) && is_array($config['data'])) { if ($config['type'] == 0) { // GET请求:将参数拼接到URL $query_string = http_build_query($config['data']); $url .= (strpos($url, '?') === false ? '?' : '&') . $query_string; } else { // POST请求:设置POST数据 $post_string = http_build_query($config['data']); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $post_string); } } // 设置基本选项 curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, $config['curl_options']['return_transfer'] ?? true); curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $config['curl_options']['connect_timeout'] ?? 10); curl_setopt($curl, CURLOPT_TIMEOUT, $config['curl_options']['timeout'] ?? 30); // SSL设置 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, $config['curl_options']['ssl_verify_peer'] ?? false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, $config['curl_options']['ssl_verify_host'] ?? false); // 重定向设置 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, $config['curl_options']['follow_location'] ?? true); // 编码设置 if (!empty($config['curl_options']['encoding'])) { curl_setopt($curl, CURLOPT_ENCODING, $config['curl_options']['encoding']); } // 代理设置 if (!empty($config['curl_options']['proxy'])) { curl_setopt($curl, CURLOPT_PROXY, $config['curl_options']['proxy']); curl_setopt($curl, CURLOPT_PROXYTYPE, $config['curl_options']['proxy_type'] ?? CURLPROXY_HTTP); // 代理认证 if (!empty($config['curl_options']['proxy_auth']['username'])) { $auth = $config['curl_options']['proxy_auth']['username'] . ':' . ($config['curl_options']['proxy_auth']['password'] ?? ''); curl_setopt($curl, CURLOPT_PROXYUSERPWD, $auth); } } // 设置请求头 $headers = $config['headers'] ?? array(); // 如果单独设置了User-Agent,添加到请求头 if (!empty($config['user_agent'])) { $headers[] = 'User-Agent: ' . $config['user_agent']; } if (!empty($headers)) { curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); } // 设置Cookie if (!empty($config['cookie'])) { curl_setopt($curl, CURLOPT_COOKIE, $config['cookie']); } // 如果是POST请求但没有明确指定Content-Type,默认使用application/x-www-form-urlencoded if ($config['type'] == 1) { $hasContentType = false; foreach ($headers as $header) { if (stripos($header, 'Content-Type:') !== false) { $hasContentType = true; break; } } if (!$hasContentType && is_array($config['data'])) { curl_setopt($curl, CURLOPT_HTTPHEADER, array_merge($headers, array( 'Content-Type: application/x-www-form-urlencoded' ))); } } // 执行请求 $response = curl_exec($curl); // 错误处理 if ($response === false) { $error = curl_error($curl); $errno = curl_errno($curl); curl_close($curl); return json_encode(array( 'code' => 400, 'msg' => '请求失败: [{$errno}] {$error}' ), JSON_UNESCAPED_UNICODE); } // 获取HTTP状态码 $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); // 获取请求信息(可选,可用于调试) $info = array( 'http_code' => $httpCode, 'total_time' => curl_getinfo($curl, CURLINFO_TOTAL_TIME), 'connect_time' => curl_getinfo($curl, CURLINFO_CONNECT_TIME), 'effective_url' => curl_getinfo($curl, CURLINFO_EFFECTIVE_URL), ); curl_close($curl); // 可以根据需要返回info信息 // return array('info' => $info, 'response' => $response); return $response; } ?>
JAVA GET/POST 教程
import java.io.*; import java.net.*; import java.util.HashMap; import java.util.Map; import java.util.List; import java.util.ArrayList; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.security.cert.X509Certificate; import java.net.Authenticator; import java.net.PasswordAuthentication; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.GsonBuilder; /** * 接口盒子:提供各种免费API接口,集群服务器保障服务稳定。 * 官网:https://www.apihz.cn/ ,服务QQ群:500700444 ,服务QQ号:2813858888 * Java通用GET/POST请求工具 * 此代码需要Gson库来处理JSON,请在项目中添加以下Maven依赖 <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.9.0</version> </dependency> */ public class HttpRequestTool { //-----------------配置类----------------- public static class RequestConfig { private String url; // 请求地址 private int type = 1; // 请求方式 0=GET,1=POST private Map data; // 请求参数 private CurlOptions curlOptions; // curl配置参数 private Map headers;// 请求头 private String cookie; // Cookie private String userAgent; // 单独设置User-Agent // 构造函数 public RequestConfig() { this.data = new HashMap<>(); this.curlOptions = new CurlOptions(); this.headers = new HashMap<>(); } // Getter和Setter方法 public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public int getType() { return type; } public void setType(int type) { this.type = type; } public Map getData() { return data; } public void setData(Map data) { this.data = data; } public void addData(String key, Object value) { this.data.put(key, value); } public CurlOptions getCurlOptions() { return curlOptions; } public void setCurlOptions(CurlOptions curlOptions) { this.curlOptions = curlOptions; } public Map getHeaders() { return headers; } public void setHeaders(Map headers) { this.headers = headers; } public void addHeader(String key, String value) { this.headers.put(key, value); } public String getCookie() { return cookie; } public void setCookie(String cookie) { this.cookie = cookie; } public String getUserAgent() { return userAgent; } public void setUserAgent(String userAgent) { this.userAgent = userAgent; } } //-----------------CURL选项类----------------- public static class CurlOptions { private int connectTimeout = 10; // 连接超时时间(秒) private int timeout = 30; // 整体超时时间(秒) private boolean sslVerifyPeer = false; // 是否验证对等证书 private boolean sslVerifyHost = false; // 是否验证主机名 private boolean followLocation = true; // 是否跟随重定向 private String encoding = ""; // 响应的编码格式 private String proxy = ""; // 代理服务器地址 private int proxyType = 0; // 代理类型 0=HTTP, 1=SOCKS4, 2=SOCKS5 private ProxyAuth proxyAuth; // 代理认证 // Getter和Setter方法 public int getConnectTimeout() { return connectTimeout; } public void setConnectTimeout(int connectTimeout) { this.connectTimeout = connectTimeout; } public int getTimeout() { return timeout; } public void setTimeout(int timeout) { this.timeout = timeout; } public boolean isSslVerifyPeer() { return sslVerifyPeer; } public void setSslVerifyPeer(boolean sslVerifyPeer) { this.sslVerifyPeer = sslVerifyPeer; } public boolean isSslVerifyHost() { return sslVerifyHost; } public void setSslVerifyHost(boolean sslVerifyHost) { this.sslVerifyHost = sslVerifyHost; } public boolean isFollowLocation() { return followLocation; } public void setFollowLocation(boolean followLocation) { this.followLocation = followLocation; } public String getEncoding() { return encoding; } public void setEncoding(String encoding) { this.encoding = encoding; } public String getProxy() { return proxy; } public void setProxy(String proxy) { this.proxy = proxy; } public int getProxyType() { return proxyType; } public void setProxyType(int proxyType) { this.proxyType = proxyType; } public ProxyAuth getProxyAuth() { return proxyAuth; } public void setProxyAuth(ProxyAuth proxyAuth) { this.proxyAuth = proxyAuth; } } //-----------------代理认证类----------------- public static class ProxyAuth { private String username = ""; private String password = ""; public ProxyAuth() {} public ProxyAuth(String username, String password) { this.username = username; this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } //-----------------响应结果类----------------- public static class ResponseResult { private int code; private String msg; private Object data; private Map info; // 请求信息,用于调试 public ResponseResult(int code, String msg) { this.code = code; this.msg = msg; } public ResponseResult(int code, String msg, Object data) { this.code = code; this.msg = msg; this.data = data; } // Getter和Setter方法 public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public Map getInfo() { return info; } public void setInfo(Map info) { this.info = info; } } //-----------------主执行方法----------------- public static void main(String[] args) { // 创建配置对象 RequestConfig config = new RequestConfig(); // 设置请求地址 config.setUrl("https://cn.apihz.cn/api/time/getapi.php"); // 设置请求方式 0=GET,1=POST config.setType(1); // 设置请求参数 Map data = new HashMap<>(); data.put("id", "88888888"); // 开发者ID data.put("key", "88888888"); // 开发者KEY data.put("type", 20); // 其他参数按格式增加 config.setData(data); // 设置CURL选项 CurlOptions curlOptions = new CurlOptions(); curlOptions.setConnectTimeout(10); // 连接超时时间(秒) curlOptions.setTimeout(30); // 整体超时时间(秒) curlOptions.setSslVerifyPeer(false); // 不验证SSL证书 curlOptions.setSslVerifyHost(false); // 不验证主机名 curlOptions.setFollowLocation(true); // 跟随重定向 curlOptions.setProxy(""); // 代理服务器地址 curlOptions.setProxyType(0); // HTTP代理 // 设置代理认证(如果需要) ProxyAuth proxyAuth = new ProxyAuth("", ""); curlOptions.setProxyAuth(proxyAuth); config.setCurlOptions(curlOptions); // 设置请求头 Map headers = new HashMap<>(); headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.97 Safari/537.36"); // 其他请求头按格式增加 config.setHeaders(headers); // 设置Cookie config.setCookie(""); // 执行请求 String result = getPost(config); // 解析JSON响应 Gson gson = new GsonBuilder().setPrettyPrinting().create(); try { JsonObject jsonObject = JsonParser.parseString(result).getAsJsonObject(); int code = jsonObject.get("code").getAsInt(); String msg = jsonObject.get("msg").getAsString(); if (code == 200) { System.out.println("请求成功: " + msg); // 返回状态码请求成功,取出对应的数据,执行自己的业务逻辑 } else { System.out.println("请求失败: " + msg); // 返回状态码请求失败,取出对应的数据,执行自己的业务逻辑 } } catch (Exception e) { // JSON解析失败 ResponseResult errorResponse = new ResponseResult(400, "解析JSON返回数据失败!"); System.out.println(gson.toJson(errorResponse)); } } //-----------------封装GET/POST请求函数----------------- public static String getPost(RequestConfig config) { // 验证必要参数 if (config.getUrl() == null || config.getUrl().trim().isEmpty()) { return createErrorResponse(400, "请求地址不能为空!"); } HttpURLConnection connection = null; BufferedReader reader = null; StringBuilder response = new StringBuilder(); Map requestInfo = new HashMap<>(); try { // 构建URL String url = config.getUrl(); // 处理GET请求参数 if (config.getType() == 0 && config.getData() != null && !config.getData().isEmpty()) { String queryString = buildQueryString(config.getData()); url += (url.contains("?") ? "&" : "?") + queryString; } // 记录请求信息 long startTime = System.currentTimeMillis(); requestInfo.put("effective_url", url); // 创建URL对象 URL urlObj = new URL(url); // 设置代理 if (config.getCurlOptions() != null && config.getCurlOptions().getProxy() != null && !config.getCurlOptions().getProxy().trim().isEmpty()) { String proxyStr = config.getCurlOptions().getProxy(); Proxy proxy = createProxy(proxyStr, config.getCurlOptions().getProxyType()); // 设置代理认证 if (config.getCurlOptions().getProxyAuth() != null) { setupProxyAuth(config.getCurlOptions().getProxyAuth()); } connection = (HttpURLConnection) urlObj.openConnection(proxy); } else { connection = (HttpURLConnection) urlObj.openConnection(); } // 设置请求方法 if (config.getType() == 0) { connection.setRequestMethod("GET"); } else { connection.setRequestMethod("POST"); } // 设置超时 if (config.getCurlOptions() != null) { connection.setConnectTimeout(config.getCurlOptions().getConnectTimeout() * 1000); connection.setReadTimeout(config.getCurlOptions().getTimeout() * 1000); } else { connection.setConnectTimeout(10000); // 默认10秒 connection.setReadTimeout(30000); // 默认30秒 } // SSL证书验证设置 if (config.getCurlOptions() != null && !config.getCurlOptions().isSslVerifyPeer()) { disableSSLVerification(); } // 设置请求头 setupHeaders(connection, config); // 设置Cookie if (config.getCookie() != null && !config.getCookie().trim().isEmpty()) { connection.setRequestProperty("Cookie", config.getCookie()); } // 处理POST请求参数 if (config.getType() == 1 && config.getData() != null && !config.getData().isEmpty()) { // 设置可输出 connection.setDoOutput(true); // 获取输出流并写入数据 try (OutputStream os = connection.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8")) { String postData = buildQueryString(config.getData()); osw.write(postData); osw.flush(); } } // 记录连接时间 requestInfo.put("connect_time", System.currentTimeMillis() - startTime); // 获取响应码 int responseCode = connection.getResponseCode(); requestInfo.put("http_code", responseCode); // 读取响应 InputStream inputStream; if (responseCode >= 200 && responseCode < 300) { inputStream = connection.getInputStream(); } else { inputStream = connection.getErrorStream(); } if (inputStream != null) { reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); String line; while ((line = reader.readLine()) != null) { response.append(line); } } // 记录总时间 requestInfo.put("total_time", System.currentTimeMillis() - startTime); // 关闭连接 connection.disconnect(); } catch (SocketTimeoutException e) { return createErrorResponse(400, "请求超时: " + e.getMessage()); } catch (ConnectException e) { return createErrorResponse(400, "连接失败: " + e.getMessage()); } catch (MalformedURLException e) { return createErrorResponse(400, "URL格式错误: " + e.getMessage()); } catch (IOException e) { return createErrorResponse(400, "IO异常: " + e.getMessage()); } catch (Exception e) { return createErrorResponse(400, "请求异常: " + e.getMessage()); } finally { // 关闭资源 if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } if (connection != null) { connection.disconnect(); } } return response.toString(); } //-----------------辅助方法----------------- /** * 构建查询字符串 */ private static String buildQueryString(Map data) { if (data == null || data.isEmpty()) { return ""; } StringBuilder queryString = new StringBuilder(); for (Map.Entry entry : data.entrySet()) { if (queryString.length() > 0) { queryString.append("&"); } try { queryString.append(URLEncoder.encode(entry.getKey(), "UTF-8")); queryString.append("="); queryString.append(URLEncoder.encode(entry.getValue().toString(), "UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return queryString.toString(); } /** * 设置请求头 */ private static void setupHeaders(HttpURLConnection connection, RequestConfig config) { // 设置User-Agent if (config.getUserAgent() != null && !config.getUserAgent().trim().isEmpty()) { connection.setRequestProperty("User-Agent", config.getUserAgent()); } else if (config.getHeaders() != null && config.getHeaders().containsKey("User-Agent")) { connection.setRequestProperty("User-Agent", config.getHeaders().get("User-Agent")); } else { // 默认User-Agent connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"); } // 设置其他请求头 if (config.getHeaders() != null) { for (Map.Entry entry : config.getHeaders().entrySet()) { if (!"User-Agent".equals(entry.getKey())) { connection.setRequestProperty(entry.getKey(), entry.getValue()); } } } // 如果是POST请求,检查是否设置了Content-Type if (config.getType() == 1) { boolean hasContentType = false; if (config.getHeaders() != null) { for (String key : config.getHeaders().keySet()) { if (key != null && key.toLowerCase().contains("content-type")) { hasContentType = true; break; } } } if (!hasContentType && config.getData() != null && !config.getData().isEmpty()) { connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); } } } /** * 禁用SSL验证 */ private static void disableSSLVerification() { try { // 创建信任所有证书的TrustManager TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { } public void checkServerTrusted(X509Certificate[] certs, String authType) { } } }; // 安装信任管理器 SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); // 设置主机名验证器 HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true); } catch (Exception e) { e.printStackTrace(); } } /** * 创建代理对象 */ private static Proxy createProxy(String proxyStr, int proxyType) { try { String[] parts = proxyStr.split(":"); String host = parts[0]; int port = Integer.parseInt(parts[1]); Proxy.Type type = Proxy.Type.HTTP; if (proxyType == 1) { type = Proxy.Type.SOCKS; } return new Proxy(type, new InetSocketAddress(host, port)); } catch (Exception e) { e.printStackTrace(); return null; } } /** * 设置代理认证 */ private static void setupProxyAuth(ProxyAuth proxyAuth) { if (proxyAuth != null && proxyAuth.getUsername() != null && !proxyAuth.getUsername().trim().isEmpty()) { Authenticator.setDefault(new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication( proxyAuth.getUsername(), proxyAuth.getPassword().toCharArray() ); } }); } } /** * 创建错误响应 */ private static String createErrorResponse(int code, String message) { ResponseResult result = new ResponseResult(code, message); Gson gson = new Gson(); return gson.toJson(result); } }
Python GET/POST 教程
import requests import json import time from typing import Dict, Any, Optional, Union """ 接口盒子:提供各种免费API接口,集群服务器保障服务稳定。 官网:https://www.apihz.cn/ ,服务QQ群:500700444 ,服务QQ号:2813858888 Python通用GET/POST请求教程 """ # -----------------配置参数----------------- config = { 'url': 'https://cn.apihz.cn/api/time/getapi.php', # 请求地址,替换为实际地址 'type': 1, # 请求方式 0=GET,1=POST //如果有参数内容较大,必须使用POST 'data': { # 请求参数 'id': '88888888', # 开发者ID 'key': '88888888', # 开发者KEY 'type': 20, # 其他参数按格式增加 }, # requests配置参数 'request_options': { # 超时设置 'timeout': 30, # 整体超时时间(秒) 'connect_timeout': 10, # 连接超时时间(秒),Python中通常合并处理 # SSL设置 'verify': False, # 是否验证SSL证书 'ssl_verify_peer': False, # 是否验证对等证书 'ssl_verify_host': False, # 是否验证主机名 # 其他设置 'allow_redirects': True, # 是否跟随重定向 'stream': False, # 是否流式传输 # 代理设置 'proxies': None, # 代理服务器设置,如{'http': 'http://127.0.0.1:8080', 'https': 'http://127.0.0.1:8080'} 'proxy_auth': None, # 代理认证,如('username', 'password') }, # 请求头 'headers': { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.97 Safari/537.36', # 其他请求头按格式增加 }, # Cookie 'cookies': None, # 可以是字符串或字典 # 编码 'encoding': None, # 响应编码,如'utf-8', 'gbk'等 # 其他 'user_agent': '', # 单独设置User-Agent,优先级高于headers中的 } # -----------------封装函数----------------- def getpost(config: Dict[str, Any]) -> Union[str, Dict[str, Any]]: """ 通用GET/POST请求函数 Args: config: 配置字典,包含请求参数 Returns: 响应内容字符串或错误字典 """ # 验证必要参数 if not config.get('url'): return json.dumps({ 'code': 400, 'msg': '请求地址不能为空!' }, ensure_ascii=False) # 准备请求参数 url = config['url'] method = 'POST' if config.get('type', 0) == 1 else 'GET' params = {} data = {} # 处理请求参数 request_data = config.get('data', {}) if request_data and isinstance(request_data, dict): if method == 'GET': params = request_data else: data = request_data # 处理请求头 headers = config.get('headers', {}).copy() # 复制避免修改原配置 # 如果单独设置了User-Agent,覆盖headers中的 if config.get('user_agent'): headers['User-Agent'] = config['user_agent'] # 如果是POST请求但没有明确指定Content-Type,默认使用application/x-www-form-urlencoded if method == 'POST' and 'Content-Type' not in headers and data: headers['Content-Type'] = 'application/x-www-form-urlencoded' # 处理cookies cookies = config.get('cookies') if isinstance(cookies, str): # 将字符串cookies转换为字典 cookies_dict = {} for cookie in cookies.split(';'): if '=' in cookie: key, value = cookie.strip().split('=', 1) cookies_dict[key] = value cookies = cookies_dict # 处理代理 request_options = config.get('request_options', {}) proxies = request_options.get('proxies') # 处理代理认证 proxy_auth = request_options.get('proxy_auth') if proxy_auth and proxies: # 如果代理地址是字符串,转换为包含认证的格式 for proxy_type in ['http', 'https']: if proxy_type in proxies and isinstance(proxies[proxy_type], str): proxy_url = proxies[proxy_type] if proxy_url.startswith('http://'): proxy_url = proxy_url.replace('http://', f'http://{proxy_auth[0]}:{proxy_auth[1]}@') proxies[proxy_type] = proxy_url # 准备请求参数 request_kwargs = { 'url': url, 'method': method, 'headers': headers, 'params': params, 'data': data, 'cookies': cookies, 'timeout': (request_options.get('connect_timeout', 10), request_options.get('timeout', 30)), 'verify': request_options.get('verify', False), 'allow_redirects': request_options.get('allow_redirects', True), 'stream': request_options.get('stream', False), 'proxies': proxies, } # 移除空值参数 request_kwargs = {k: v for k, v in request_kwargs.items() if v is not None} try: # 发送请求 response = requests.request(**request_kwargs) # 处理编码 if config.get('encoding'): response.encoding = config['encoding'] # 返回响应 return response.text except requests.exceptions.Timeout as e: return json.dumps({ 'code': 400, 'msg': f'请求超时: {str(e)}' }, ensure_ascii=False) except requests.exceptions.ConnectionError as e: return json.dumps({ 'code': 400, 'msg': f'连接错误: {str(e)}' }, ensure_ascii=False) except requests.exceptions.RequestException as e: return json.dumps({ 'code': 400, 'msg': f'请求失败: {str(e)}' }, ensure_ascii=False) except Exception as e: return json.dumps({ 'code': 400, 'msg': f'未知错误: {str(e)}' }, ensure_ascii=False) # -----------------执行请求----------------- if __name__ == '__main__': # 执行请求 res = getpost(config) # 尝试解析JSON响应 try: if isinstance(res, str): datas = json.loads(res) else: datas = res if isinstance(datas, dict): if datas.get('code') == 200: print(datas.get('msg', '请求成功')) # 返回状态码请求成功,取出对应的数据,执行自己的业务逻辑 else: print(datas.get('msg', '请求失败')) # 返回状态码请求失败,取出对应的数据,执行自己的业务逻辑 else: # 如果不是JSON,直接输出 print(res) except json.JSONDecodeError: # JSON解析失败 if isinstance(res, str): print(json.dumps({ 'code': 400, 'msg': '解析JSON返回数据失败!', 'raw_response': res[:200] # 只显示前200个字符 }, ensure_ascii=False)) else: print(json.dumps({ 'code': 400, 'msg': '解析JSON返回数据失败!' }, ensure_ascii=False)) except Exception as e: print(json.dumps({ 'code': 400, 'msg': f'处理响应时出错: {str(e)}' }, ensure_ascii=False))
C# GET/POST 教程
using System; using System.Collections.Generic; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json.Linq; namespace ApiHzCSharpDemo { /// <summary> /// API盒子:提供各种免费API接口,集群服务器保障服务稳定。 /// 官网:https://www.apihz.cn/ ,服务QQ群:500700444 ,服务QQ号:2813858888 /// C#通用GET/POST请求教程 /// </summary> class Program { /// <summary> /// API请求配置类 /// </summary> public class ApiConfig { /// <summary> /// 请求地址 /// </summary> public string Url { get; set; } = "https://cn.apihz.cn/api/time/getapi.php"; /// <summary> /// 请求方式 0=GET,1=POST /// 如果有参数内容较大,必须使用POST /// </summary> public int RequestType { get; set; } = 1; /// <summary> /// 请求参数 /// </summary> public Dictionary<string, object> Data { get; set; } = new Dictionary<string, object>() { { "id", "88888888" }, // 开发者ID { "key", "88888888" }, // 开发者KEY { "type", 20 } // 其他参数按格式增加 }; /// <summary> /// HttpClient配置参数 /// </summary> public HttpClientOptions HttpClientOptions { get; set; } = new HttpClientOptions(); /// <summary> /// 请求头 /// </summary> public Dictionary<string, string> Headers { get; set; } = new Dictionary<string, string>() { { "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.97 Safari/537.36" } // 其他请求头按格式增加 }; /// <summary> /// Cookie /// </summary> public string Cookie { get; set; } = ""; /// <summary> /// 单独设置User-Agent,优先级高于Headers中的 /// </summary> public string UserAgent { get; set; } = ""; } /// <summary> /// HttpClient配置参数类 /// </summary> public class HttpClientOptions { /// <summary> /// 超时时间(秒) /// </summary> public int Timeout { get; set; } = 30; /// <summary> /// SSL设置 /// </summary> public SslOptions SslOptions { get; set; } = new SslOptions(); /// <summary> /// 代理设置 /// </summary> public ProxyOptions ProxyOptions { get; set; } = new ProxyOptions(); /// <summary> /// 是否自动处理重定向 /// </summary> public bool AllowAutoRedirect { get; set; } = true; } /// <summary> /// SSL配置类 /// </summary> public class SslOptions { /// <summary> /// 是否验证SSL证书 /// 注意:在生产环境中应设置为true以确保安全 /// </summary> public bool ValidateCertificate { get; set; } = false; } /// <summary> /// 代理配置类 /// </summary> public class ProxyOptions { /// <summary> /// 代理服务器地址,如"http://127.0.0.1:8080" /// </summary> public string Address { get; set; } = ""; /// <summary> /// 代理认证用户名 /// </summary> public string Username { get; set; } = ""; /// <summary> /// 代理认证密码 /// </summary> public string Password { get; set; } = ""; } /// <summary> /// 返回结果类 /// </summary> public class ApiResult { public int Code { get; set; } public string Msg { get; set; } public object Data { get; set; } } static async Task Main(string[] args) { //-----------------配置参数----------------- var config = new ApiConfig { Url = "https://cn.apihz.cn/api/time/getapi.php", // 请求地址,替换为实际地址 RequestType = 1, // 请求方式 0=GET,1=POST Data = new Dictionary<string, object> { { "id", "88888888" }, // 开发者ID { "key", "88888888" }, // 开发者KEY { "type", 20 } // 其他参数按格式增加 } }; //-----------------执行请求----------------- try { // 使用异步方法执行请求 var response = await GetPostAsync(config); // 对返回内容进行JSON解析 var result = ParseApiResponse(response); if (result.Code == 200) { Console.WriteLine(result.Msg); // 返回状态码请求成功,取出对应的数据,执行自己的业务逻辑 } else { Console.WriteLine(result.Msg); // 返回状态码请求失败,取出对应的数据,执行自己的业务逻辑 } } catch (Exception ex) { Console.WriteLine($"请求发生异常: {ex.Message}"); } } /// <summary> /// 解析API响应 /// </summary> /// <param name="response">响应字符串</param> /// <returns>解析后的ApiResult对象</returns> public static ApiResult ParseApiResponse(string response) { try { // 尝试解析JSON var json = JObject.Parse(response); return new ApiResult { Code = json["code"]?.Value<int>() ?? 400, Msg = json["msg"]?.Value<string>() ?? "响应格式不正确", Data = json["data"] }; } catch { // 解析失败 return new ApiResult { Code = 400, Msg = "解析JSON返回数据失败!", Data = null }; } } /// <summary> /// 封装的GET/POST请求函数(异步版本) /// </summary> /// <param name="config">请求配置</param> /// <returns>响应字符串</returns> public static async Task<string> GetPostAsync(ApiConfig config) { // 验证必要参数 if (string.IsNullOrEmpty(config.Url)) { var errorResult = new { code = 400, msg = "请求地址不能为空!" }; return Newtonsoft.Json.JsonConvert.SerializeObject(errorResult); } // 创建HttpClientHandler配置 var handler = new HttpClientHandler(); // 设置SSL验证 if (!config.HttpClientOptions.SslOptions.ValidateCertificate) { // 注意:在生产环境中不应禁用SSL验证 handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true; } // 设置代理 if (!string.IsNullOrEmpty(config.HttpClientOptions.ProxyOptions.Address)) { handler.Proxy = new System.Net.WebProxy(config.HttpClientOptions.ProxyOptions.Address); if (!string.IsNullOrEmpty(config.HttpClientOptions.ProxyOptions.Username)) { handler.Proxy.Credentials = new System.Net.NetworkCredential( config.HttpClientOptions.ProxyOptions.Username, config.HttpClientOptions.ProxyOptions.Password ); } } // 设置Cookie if (!string.IsNullOrEmpty(config.Cookie)) { // 可以在这里解析Cookie字符串并添加到handler // 简化处理,实际使用中可能需要更复杂的Cookie处理 } // 设置是否允许重定向 handler.AllowAutoRedirect = config.HttpClientOptions.AllowAutoRedirect; // 创建HttpClient using var httpClient = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(config.HttpClientOptions.Timeout) }; // 设置请求头 if (!string.IsNullOrEmpty(config.UserAgent)) { httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(config.UserAgent); } else if (config.Headers.ContainsKey("User-Agent")) { httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(config.Headers["User-Agent"]); } // 添加其他请求头 foreach (var header in config.Headers) { if (header.Key != "User-Agent" && header.Key != "Content-Type") { try { httpClient.DefaultRequestHeaders.Add(header.Key, header.Value); } catch { // 忽略无法添加的请求头 } } } // 处理请求参数 string fullUrl = config.Url; HttpContent content = null; if (config.Data != null && config.Data.Count > 0) { if (config.RequestType == 0) // GET请求 { // 将参数拼接到URL var queryString = new System.Text.StringBuilder(); bool isFirst = true; foreach (var param in config.Data) { if (isFirst) { queryString.Append($"?{Uri.EscapeDataString(param.Key)}={Uri.EscapeDataString(param.Value.ToString())}"); isFirst = false; } else { queryString.Append($"&{Uri.EscapeDataString(param.Key)}={Uri.EscapeDataString(param.Value.ToString())}"); } } fullUrl += queryString.ToString(); } else // POST请求 { // 创建表单数据 var formData = new List<KeyValuePair<string, string>>(); foreach (var param in config.Data) { formData.Add(new KeyValuePair<string, string>(param.Key, param.Value.ToString())); } content = new FormUrlEncodedContent(formData); // 如果没有明确指定Content-Type,默认使用application/x-www-form-urlencoded if (!config.Headers.ContainsKey("Content-Type")) { content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded"); } } } try { HttpResponseMessage response; if (config.RequestType == 0) // GET请求 { response = await httpClient.GetAsync(fullUrl); } else // POST请求 { response = await httpClient.PostAsync(config.Url, content); } // 确保响应成功 response.EnsureSuccessStatusCode(); // 读取响应内容 var responseContent = await response.Content.ReadAsStringAsync(); return responseContent; } catch (HttpRequestException ex) { var errorResult = new { code = 400, msg = $"HTTP请求失败: {ex.Message}" }; return Newtonsoft.Json.JsonConvert.SerializeObject(errorResult); } catch (TaskCanceledException ex) { var errorResult = new { code = 400, msg = $"请求超时: {ex.Message}" }; return Newtonsoft.Json.JsonConvert.SerializeObject(errorResult); } catch (Exception ex) { var errorResult = new { code = 400, msg = $"请求失败: {ex.Message}" }; return Newtonsoft.Json.JsonConvert.SerializeObject(errorResult); } } /// <summary> /// 封装的GET/POST请求函数(同步版本) /// </summary> /// <param name="config">请求配置</param> /// <returns>响应字符串</returns> public static string GetPost(ApiConfig config) { // 调用异步方法并同步等待结果 return GetPostAsync(config).GetAwaiter().GetResult(); } } }
ObjectC GET/POST 教程
不告诉你

注意:请求参数内容较大时必须使用POST,不能使用GET,否则请求地址过长会造成服务器无法解析。