无法生成临时类(result=1)。\nerror

本文介绍了解决.NET应用程序中因权限不足导致的临时类生成失败的问题。通过为特定用户帐户授予对系统临时文件夹的读写权限,可以有效避免此类错误的发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

System.Web.Services.Protocols.SoapException: 服务器无法处理请求。---> System.InvalidOperationException: 无法生成临时类(result=1)。\nerror CS2001: 未能找到源文件“C:\\WINDOWS\\TEMP\\zyobqxbr.0.cs()

 

解决办法:

给C:\WINDOWS\Temp文件夹加“NETWORK SERVICE”帐户读写权限

这种方法我尝试了一下,可以解决问题,比赋予users的读写权限安全!具体如下:

不要对everyone授权,这样不安全~ 

查找这两个用户帐户之一: 

如果计算机运行 Windows XP Professional 或 Windows 2000,则查找 computer\ASPNET。 

如果计算机运行 Windows Server 2003,则查找 NETWORK SERVICE。     

来自:http://topic.youkuaiyun.com/t/20061124/11/5182205.html

出现这样的问题,主要是因为WS使用的帐号对您的TEMP目录没有完全控制的权限。

转载于:https://www.cnblogs.com/hailiang/archive/2012/03/10/2389178.html

1, 'msg' => '上传失败:' . $file['error']); echo json_encode($result); } else { $filesize = $file['size'] / 2048; // 将文件大小转换为 KB if ($filesize > 2048) { // 文件大小不能超过 1MB $result = array('code' => 2, 'msg' => '上传失败:文件大小不能超过 1MB'); echo json_encode($result); } else if (!in_array($extension, $allowext)) { $result = array('code' => 3, 'msg' => '上传失败:扩展名不支持,请选择 GIF、JPG、JPEG 或 PNG 文件'); echo json_encode($result); } else { $upload_dir = '/var/www/uploads/'; // 上传文件保存的目录 if (!file_exists($upload_dir)) { mkdir($upload_dir, 0777, true); // 如果目录不存在,则创建目录 } $filename = uniqid() . '.' . $extension; // 生成唯一的文件名 $filepath = $upload_dir . $filename; // 文件上传的目标路径 if (move_uploaded_file($file['tmp_name'], $filepath)) { // 将临时文件移动到目标路径 $result = '["\u4e0a\u4f20\u6210\u529f"]'; $result_arr = json_decode($result, true); echo $result_arr[0]; // 输出:上传成功 // 记录上传日志 $log_file = 'D:\phpstudy_pro\logs\upload.log'; // 日志文件路径 $log_content = "[" . date("Y-m-d H:i:s") . "] " . $filename . " 上传成功\n"; if (!file_exists($log_file)) { // 如果日志文件不存在,则创建日志文件 touch($log_file); chmod($log_file, 0666); } file_put_contents($log_file, $log_content, FILE_APPEND); } else { $result = array('code' => 4, 'msg' => '上传失败:移动文件时出错'); echo json_encode($result); // 记录上传日志 $log_file = 'D:\phpstudy_pro\logs\upload.log'; // 日志文件路径 $log_content = "[" . date("Y-m-d H:i:s") . "] " . $filename . " 上传失败\n"; if (!file_exists($log_file)) { // 如果日志文件不存在,则创建日志文件 touch($log_file); chmod($log_file, 0666); } file_put_contents($log_file, $log_content, FILE_APPEND); } } } } ?> 修改这段代码,提交成功时显示文件名称,文件型,文件大小,文件存储路径
03-20
小蓝窗:“PS C:\Users\Administrator> # 创建模块目录 PS C:\Users\Administrator> $moduleName = "PSHttpClient" PS C:\Users\Administrator> $moduleVersion = "1.2.0" PS C:\Users\Administrator> $moduleDir = "$env:ProgramFiles\WindowsPowerShell\Modules\$moduleName\$moduleVersion" PS C:\Users\Administrator> New-Item -Path $moduleDir -ItemType Directory -Force | Out-Null PS C:\Users\Administrator> PS C:\Users\Administrator> # 创建模块文件 PS C:\Users\Administrator> $moduleContent = @' >> # 加载必要程序集(兼容 .NET 9 和旧版) >> try { >> Add-Type -AssemblyName System.Net.Http -ErrorAction Stop >> } catch { >> [System.Reflection.Assembly]::LoadWithPartialName("System.Net.Http") | Out-Null >> } >> >> # 检测 .NET 版本 >> $dotnetVersion = [System.Environment]::Version >> $isNet9OrNewer = $dotnetVersion.Major -ge 9 -or ($dotnetVersion.Major -eq 8 -and $dotnetVersion.Minor -ge 0) >> >> function Invoke-EnhancedCurlRequest { >> [CmdletBinding()] >> param( >> [Parameter(Mandatory=$true)] >> [string]$Uri, >> [ValidateSet('GET','POST','PUT','DELETE','PATCH','HEAD','OPTIONS')] >> [string]$Method = 'GET', >> [hashtable]$Headers = @{}, >> [object]$Body, >> [int]$Timeout = 30, >> [switch]$SkipCertificateCheck, >> [switch]$UseGzipCompression, >> [switch]$EnableHttp2 >> ) >> >> # 使用强型结果模板 >> $resultTemplate = [PSCustomObject]@{ >> StatusCode = 0 >> StatusMessage = "NotExecuted" >> Headers = [ordered]@{} >> Content = $null >> IsSuccess = $false >> Technology = "None" >> ErrorMessage = $null >> ElapsedMs = 0 >> Protocol = "Unknown" >> DotnetVersion = $dotnetVersion.ToString() >> } >> >> $timer = [System.Diagnostics.Stopwatch]::StartNew() >> $result = $resultTemplate.PSObject.Copy() >> >> # 重构证书检测逻辑 >> $useHttpClient = $true >> $oldCallback = $null >> >> if ($SkipCertificateCheck) { >> try { >> # 正确的证书验证检测方式 >> $testHandler = New-Object System.Net.Http.HttpClientHandler >> $testHandler.ServerCertificateCustomValidationCallback = { >> param($sender, $cert, $chain, $errors) >> return $true >> } >> } catch { >> $useHttpClient = $false >> } >> } >> >> if ($useHttpClient) { >> # ======================== .NET 9 优化实现 ======================== >> $result.Technology = "HttpClient(.NET $($dotnetVersion.Major))" >> >> try { >> # 创建 HttpClientHandler >> $handler = New-Object System.Net.Http.HttpClientHandler >> >> # .NET 9 特有的优化特性 >> if ($isNet9OrNewer) { >> # 启用 HTTP/2 或 HTTP/3 >> $handler.MaxConnectionsPerServer = 10 >> $handler.PooledConnectionLifetime = [System.TimeSpan]::FromMinutes(1) >> >> if ($EnableHttp2) { >> $handler.DefaultVersionPolicy = [System.Net.Http.HttpVersionPolicy]::RequestVersionOrHigher >> $handler.DefaultRequestVersion = [System.Version]::new(2, 0) >> } >> } >> >> # 证书验证 >> if ($SkipCertificateCheck) { >> $handler.ServerCertificateCustomValidationCallback = { >> param($sender, $cert, $chain, $errors) >> return $true >> } >> } >> >> # 压缩支持 >> if ($UseGzipCompression) { >> $handler.AutomaticDecompression = [System.Net.DecompressionMethods]::GZip >> } >> >> # 创建 HttpClient >> $client = New-Object System.Net.Http.HttpClient($handler) >> $client.Timeout = [System.TimeSpan]::FromSeconds($Timeout) >> >> # 修复3:正确创建HttpMethod对象 >> $httpMethod = [System.Net.Http.HttpMethod]::new($Method) >> $request = New-Object System.Net.Http.HttpRequestMessage($httpMethod, $Uri) >> >> # 协议版本设置 >> if ($isNet9OrNewer -and $EnableHttp2) { >> $request.Version = [System.Version]::new(2, 0) >> $request.VersionPolicy = [System.Net.Http.HttpVersionPolicy]::RequestVersionOrHigher >> } >> >> # 添加默认 User-Agent >> if (-not $Headers.ContainsKey('User-Agent')) { >> $request.Headers.TryAddWithoutValidation("User-Agent", "PowerShell-HTTPClient/1.0 (.NET $($dotnetVersion.Major))") >> } >> >> # 添加自定义头 >> foreach ($key in $Headers.Keys) { >> if (-not $request.Headers.TryAddWithoutValidation($key, $Headers[$key])) { >> # 如果头字段无法添加到请求头,尝试添加到内容头 >> if (-not $request.Content) { >> $request.Content = New-Object System.Net.Http.StringContent("") >> } >> $request.Content.Headers.TryAddWithoutValidation($key, $Headers[$key]) >> } >> } >> >> # 处理请求体 >> if ($Body -and @('POST','PUT','PATCH') -contains $Method) { >> if ($Body -is [byte[]]) { >> $request.Content = New-Object System.Net.Http.ByteArrayContent($Body) >> } >> elseif ($Body -is [hashtable] -or $Body -is [System.Collections.IDictionary]) { >> $jsonBody = $Body | ConvertTo-Json -Depth 10 -Compress >> $request.Content = New-Object System.Net.Http.StringContent( >> $jsonBody, >> [System.Text.Encoding]::UTF8, >> "application/json" >> ) >> } >> elseif ($Body -is [string]) { >> $request.Content = New-Object System.Net.Http.StringContent( >> $Body, >> [System.Text.Encoding]::UTF8 >> ) >> } >> else { >> throw "Unsupported body type: $($Body.GetType().Name)" >> } >> } >> >> # 发送请求(异步转同步) >> $response = $client.SendAsync($request).GetAwaiter().GetResult() >> >> # 记录实际使用的协议 >> $result.Protocol = "HTTP/" + $response.Version.ToString() >> >> # 解析响应 >> $result.StatusCode = [int]$response.StatusCode >> $result.StatusMessage = $response.ReasonPhrase >> $result.IsSuccess = $response.IsSuccessStatusCode >> >> # 处理响应头 >> $result.Headers = [ordered]@{} >> foreach ($header in $response.Headers) { >> $result.Headers[$header.Key] = $header.Value -join ", " >> } >> >> foreach ($header in $response.Content.Headers) { >> $result.Headers[$header.Key] = $header.Value -join ", " >> } >> >> # 读取响应内容 >> $result.Content = $response.Content.ReadAsStringAsync().GetAwaiter().GetResult() >> } >> catch [System.Threading.Tasks.TaskCanceledException] { >> $result.ErrorMessage = "Request timed out after $Timeout seconds" >> $result.StatusCode = 408 >> $result.StatusMessage = "Timeout" >> } >> catch [System.Net.Http.HttpRequestException] { >> # 增强的错误处理 >> $ex = $_.Exception >> $result.ErrorMessage = $ex.ToString() >> >> # 检查具体错误型 >> $dnsError = $false >> $sslError = $false >> >> if ($isNet9OrNewer) { >> # .NET 9 提供更精确的错误型 >> if ($ex.InnerException -is [System.Net.Sockets.SocketException]) { >> $dnsError = $true >> } >> elseif ($ex.InnerException -is [System.Security.Authentication.AuthenticationException]) { >> $sslError = $true >> } >> } else { >> # 旧版兼容性处理 >> $currentException = $ex >> while ($currentException -ne $null) { >> if ($currentException -is [System.Net.Sockets.SocketException]) { >> $dnsError = $true >> break >> } >> if ($currentException -is [System.Security.Authentication.AuthenticationException]) { >> $sslError = $true >> break >> } >> $currentException = $currentException.InnerException >> } >> } >> >> if ($dnsError) { >> $result.StatusCode = 0 >> $result.StatusMessage = "DNSResolutionFailed" >> } >> elseif ($sslError) { >> $result.StatusCode = 495 >> $result.StatusMessage = "SSLCertificateError" >> } >> else { >> $result.StatusCode = 500 >> $result.StatusMessage = "HttpRequestError" >> } >> } >> catch { >> $result.ErrorMessage = $_.Exception.ToString() >> $result.StatusCode = 500 >> $result.StatusMessage = "InternalError" >> } >> finally { >> # 释放资源 >> if ($response -is [System.IDisposable]) { $response.Dispose() } >> if ($request -is [System.IDisposable]) { $request.Dispose() } >> if ($client -is [System.IDisposable]) { $client.Dispose() } >> if ($handler -is [System.IDisposable]) { $handler.Dispose() } >> } >> } >> else { >> # ======================== 备用实现(兼容旧版) ======================== >> $result.Technology = "HttpWebRequest" >> >> try { >> # 设置全局证书验证回调 >> if ($SkipCertificateCheck) { >> $oldCallback = [System.Net.ServicePointManager]::ServerCertificateValidationCallback >> [System.Net.ServicePointManager]::ServerCertificateValidationCallback = { >> param($sender, $certificate, $chain, $sslPolicyErrors) >> return $true >> } >> } >> >> # 创建请求 >> $request = [System.Net.HttpWebRequest]::Create($Uri) >> $request.Method = $Method >> $request.Timeout = $Timeout * 1000 >> >> # 添加默认 User-Agent >> if (-not $Headers.ContainsKey('User-Agent')) { >> $request.UserAgent = "PowerShell-HTTPClient/1.0 (Legacy)" >> } >> >> # 添加自定义头 >> foreach ($极 in $Headers.Keys) { >> $request.Headers.Add($key, $Headers[$key]) >> } >> >> # 处理请求体 >> if ($Body -and @('POST','PUT','PATCH') -contains $Method) { >> $request.ContentType = "application/json" >> $bodyBytes = [System.Text.Encoding]::UTF8.GetBytes(($Body | ConvertTo-Json -Depth 10 -Compress)) >> $request.ContentLength = $bodyBytes.Length >> >> $requestStream = $request.GetRequestStream() >> $requestStream.Write($bodyBytes, 0, $bodyBytes.Length) >> $requestStream.Close() >> } >> >> # 发送请求并获取响应 >> $response = $request.GetResponse() >> $result.StatusCode = [int]$response.StatusCode >> $result.StatusMessage = $极.Response.StatusDescription >> $result.IsSuccess = $result.StatusCode -ge 200 -and $result.StatusCode -lt 300 >> >> # 读取响应头 >> $result.Headers = [ordered]@{} >> foreach ($key in $response.Headers.AllKeys) { >> $result.Headers[$key] = $response.Headers[$key] >> } >> >> # 读取响应体 >> $responseStream = $response.GetResponseStream() >> $reader = New-Object System.IO.StreamReader($responseStream) >> $result.Content = $reader.ReadToEnd() >> $reader.Close() >> $response.Close() >> } >> catch [System.Net.WebException] { >> $ex = $_.Exception >> $result.ErrorMessage = $ex.ToString() >> >> if ($ex.Response -ne $null) { >> $httpResponse = $ex.Response >> $result.StatusCode = [int]$httpResponse.StatusCode >> $result.StatusMessage = $httpResponse.StatusDescription >> >> # 读取错误响应体 >> $errorStream = $httpResponse.GetResponseStream() >> $errorReader = New-Object System.IO.StreamReader($errorStream) >> $result.Content = $errorReader.ReadToEnd() >> $errorReader.Close() >> } >> else { >> # 检查具体错误型 >> if ($ex.Status -eq [System.Net.WebExceptionStatus]::NameResolutionFailure) { >> $result.StatusCode = 0 >> $result.StatusMessage = "DNSResolutionFailed" >> } >> elseif ($ex.Status -eq [System.Net.WebExceptionStatus]::TrustFailure) { >> $result.Status极 = 495 >> $result.StatusMessage = "SSLCertificateError" >> } >> elseif ($ex.Status -eq [System.Net.WebExceptionStatus]::Timeout) { >> $result.StatusCode = 408 >> $result.StatusMessage = "Timeout" >> } >> else { >> $result.StatusCode = 500 >> $result.StatusMessage = "WebException" >> } >> } >> } >> catch { >> $result.ErrorMessage = $_.Exception.ToString() >> $result.StatusCode = 500 >> $result.StatusMessage = "InternalError" >> } >> finally { >> # 恢复全局证书验证回调 >> if ($SkipCertificateCheck) { >> [System.Net.ServicePointManager]::ServerCertificateValidationCallback = $oldCallback >> } >> } >> } >> >> $timer.Stop() >> $result.ElapsedMs = $timer.ElapsedMilliseconds >> return $result >> } >> >> # 导出模块成员 >> Export-ModuleMember -Function Invoke-EnhancedCurlRequest >> '@ >> PS C:\Users\Administrator> $moduleContent | Out-File "$moduleDir\PSHttpClient.psm1" -Encoding UTF8 -Force PS C:\Users\Administrator> PS C:\Users\Administrator> # 创建模块清单文件 PS C:\Users\Administrator> $manifestContent = @" >> @{ >> RootModule = 'PSHttpClient.psm1' >> ModuleVersion = '$moduleVersion' >> GUID = 'd1c2b3a4-5e6f-7g8h-9i0j-1k2l3m4n5o6p' >> Author = 'PowerShell User' >> CompanyName = 'N/A' >> Copyright = '(c) 2023. All rights reserved.' >> Description = 'Enhanced HTTP client for PowerShell with .NET 9 support' >> PowerShellVersion = '5.1' >> FunctionsToExport = @('Invoke-EnhancedCurlRequest') >> RequiredAssemblies = @('System.Net.Http') >> } >> "@ >> PS C:\Users\Administrator> $manifestContent | Out-File "$moduleDir\PSHttpClient.psd1" -Encoding UTF8 -Force PS C:\Users\Administrator> PS C:\Users\Administrator> # 安装完成,导入模块 PS C:\Users\Administrator> Write-Host "`n=== 模块安装成功 ===" -ForegroundColor Green === 模块安装成功 === PS C:\Users\Administrator> Write-Host "模块路径: $moduleDir" -ForegroundColor Cyan 模块路径: C:\Program Files\WindowsPowerShell\Modules\PSHttpClient\1.2.0 PS C:\Users\Administrator> Write-Host "版本: $moduleVersion" -ForegroundColor Cyan 版本: 1.2.0 PS C:\Users\Administrator> Write-Host ".NET 版本: $dotnetVersion" -ForegroundColor Cyan .NET 版本: PS C:\Users\Administrator> PS C:\Users\Administrator> # 导入模块 PS C:\Users\Administrator> Remove-Module PSHttpClient -ErrorAction SilentlyContinue PS C:\Users\Administrator> Import-Module "$moduleDir\PSHttpClient.psm1" -Force -Verbose 详细信息: 正在从路径“C:\Program Files\WindowsPowerShell\Modules\PSHttpClient\1.2.0\PSHttpClient.psm1”加载模块。 详细信息: 正在导入函数“Invoke-EnhancedCurlRequest”。 PS C:\Users\Administrator> PS C:\Users\Administrator> # 验证安装 PS C:\Users\Administrator> if (Get-Command Invoke-EnhancedCurlRequest -ErrorAction SilentlyContinue) { >> Write-Host "`n=== 功能验证 ===" -ForegroundColor Green >> Write-Host "测试基本请求: https://httpbin.org/get" >> $result = Invoke-EnhancedCurlRequest -Uri "https://httpbin.org/get" >> Write-Host "状态码: $($result.StatusCode) $($result.StatusMessage)" >> Write-Host "技术: $($result.Technology)" >> Write-Host "协议: $($result.Protocol)" >> Write-Host "耗时: $($result.ElapsedMs)ms" >> >> Write-Host "`n=== 模块已成功安装并导入 ===" -ForegroundColor Green >> } else { >> Write-Host "`n!!! 模块安装失败 !!!" -ForegroundColor Red >> Write-Host "请检查错误信息并重试" -ForegroundColor Red >> } >> === 功能验证 === 测试基本请求: https://httpbin.org/get 状态码: 200 OK 技术: HttpClient(.NET 4) 协议: HTTP/1.1 耗时: 1155ms === 模块已成功安装并导入 === PS C:\Users\Administrator> # 导入模块(如果未自动导入) PS C:\Users\Administrator> Import-Module PSHttpClient -Force Import-Module : 模块清单文件“C:\Program Files\WindowsPowerShell\Modules\PSHttpClient\1.2.0\PSHttpClient.psd1”中的“gu id”成员无效: 无法将值“d1c2b3a4-5e6f-7g8h-9i0j-1k2l3m4n5o6p”转换为型“System.Guid”。错误:“Guid 字符串只应包含十六 进制字符。” 所在位置 行:1 字符: 1 + Import-Module PSHttpClient -Force + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ResourceUnavailable: (C:\Program File...HttpClient.psd1:String) [Import-Module], Argumen tException + FullyQualifiedErrorId : Modules_InvalidManifest,Microsoft.PowerShell.Commands.ImportModuleCommand PS C:\Users\Administrator> PS C:\Users\Administrator> # 基本GET请求 PS C:\Users\Administrator> $result = Invoke-EnhancedCurlRequest -Uri "https://httpbin.org/get" Invoke-EnhancedCurlRequest : 无法将“Invoke-EnhancedCurlRequest”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请 检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 11 + $result = Invoke-EnhancedCurlRequest -Uri "https://httpbin.org/get" + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Invoke-EnhancedCurlRequest:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException PS C:\Users\Administrator> $result | Format-List True StatusCode : 200 StatusMessage : OK Headers : {Connection, Access-Control-Allow-Origin, Access-Control-Allow-Credentials, Date...} Content : { "args": {}, "headers": { "Host": "httpbin.org", "User-Agent": "PowerShell-HTTPClient/1.0 (.NET 4)", "X-Amzn-Trace-Id": "Root=1-68a07c9b-3da8c8115bd19c2018aaa3c8" }, "origin": "112.40.123.16", "url": "https://httpbin.org/get" } IsSuccess : True Technology : HttpClient(.NET 4) ErrorMessage : ElapsedMs : 1155 Protocol : HTTP/1.1 DotnetVersion : 4.0.30319.42000 PS C:\Users\Administrator> PS C:\Users\Administrator> # POST请求示例 PS C:\Users\Administrator> $postData = @{ >> name = "John Doe" >> age = 30 >> email = "john.doe@example.com" >> } >> $result = Invoke-EnhancedCurlRequest -Uri "https://httpbin.org/post" -Method POST -Body $postData >> $result.Content | ConvertFrom-Json | Format-List >> Invoke-EnhancedCurlRequest : 无法将“Invoke-EnhancedCurlRequest”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请 检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:6 字符: 11 + $result = Invoke-EnhancedCurlRequest -Uri "https://httpbin.org/post" ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Invoke-EnhancedCurlRequest:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException args : headers : @{Host=httpbin.org; User-Agent=PowerShell-HTTPClient/1.0 (.NET 4); X-Amzn-Trace-Id=Root=1-68a07c9b-3da8c8115b d19c2018aaa3c8} origin : 112.40.123.16 url : https://httpbin.org/get PS C:\Users\Administrator> # 忽略证书验证 PS C:\Users\Administrator> $result = Invoke-EnhancedCurlRequest -Uri "https://self-signed.badssl.com/" -SkipCertificateCheck Invoke-EnhancedCurlRequest : 无法将“Invoke-EnhancedCurlRequest”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请 检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 11 + $result = Invoke-EnhancedCurlRequest -Uri "https://self-signed.badssl ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Invoke-EnhancedCurlRequest:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException PS C:\Users\Administrator> $result | Format-List True StatusCode : 200 StatusMessage : OK Headers : {Connection, Access-Control-Allow-Origin, Access-Control-Allow-Credentials, Date...} Content : { "args": {}, "headers": { "Host": "httpbin.org", "User-Agent": "PowerShell-HTTPClient/1.0 (.NET 4)", "X-Amzn-Trace-Id": "Root=1-68a07c9b-3da8c8115bd19c2018aaa3c8" }, "origin": "112.40.123.16", "url": "https://httpbin.org/get" } IsSuccess : True Technology : HttpClient(.NET 4) ErrorMessage : ElapsedMs : 1155 Protocol : HTTP/1.1 DotnetVersion : 4.0.30319.42000 PS C:\Users\Administrator> PS C:\Users\Administrator> # 启用HTTP/2 PS C:\Users\Administrator> $result = Invoke-EnhancedCurlRequest -Uri "https://http2.pro/api/v1" -EnableHttp2 Invoke-EnhancedCurlRequest : 无法将“Invoke-EnhancedCurlRequest”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请 检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 11 + $result = Invoke-EnhancedCurlRequest -Uri "https://http2.pro/api/v1" ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Invoke-EnhancedCurlRequest:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException PS C:\Users\Administrator> Write-Host "使用的协议: $($result.Protocol)" 使用的协议: HTTP/1.1 PS C:\Users\Administrator>” 如果你需要我储存文件 请告诉我文件储存的路径 不然我存不了
最新发布
08-17
### 动态执行临时生成的 Python 文件 为了在 Python 中动态创建并执行临时代码文件,可以采用多种方法。一种常见的方式是通过 `tempfile` 模块来创建临时文件,并利用内置函数 `exec()` 或者子进程模块 `subprocess` 来执行这些文件。 #### 使用 tempfile 和 exec 执行临时脚本 当需要在一个安全可控环境中快速测试某些逻辑时,这种方法非常有用: ```python import tempfile code_to_execute = """ def greet(name): print(f'Hello {name}') greet('World') """ with tempfile.NamedTemporaryFile(mode='w+', suffix='.py', delete=False) as temp: temp.write(code_to_execute) # 将文件名保存下来以便稍后读取或删除 filename = temp.name # 加载并执行临时文件中的代码 with open(filename, 'r') as file: code_string = file.read() exec(code_string) ``` 此方式不会留下`.pyc`缓存文件[^1],因为所使用的`exec()`是在内存中解释执行给定字符串形式的Python程序而不是真正启动新的Python解析器实例去编译源码到字节码再加载入磁盘上的`.pyc`文件里。 #### 利用 subprocess 运行独立的 Python 解释器会话 如果希望像正常运行 `.py` 文件那样,在单独进程中调用 Python 解释器,则可以选择如下做法: ```python from pathlib import Path import subprocess import sys dynamic_code = ''' print("This is dynamically generated python script.") ''' with tempfile.NamedTemporaryFile(mode="w+", suffix=".py", delete=True) as tmp_file: tmp_file.write(dynamic_code) tmp_file.flush() result = subprocess.run( [sys.executable, str(Path(tmp_file.name))], capture_output=True, text=True ) if result.returncode == 0: print(result.stdout.strip()) else: raise RuntimeError(f"Script failed:\n{result.stderr}") ``` 这种方式会在执行过程中产生似于 `t.cpython-38.pyc` 的缓存文件,并且可以在不同平台上获得与直接双击打开 `.py` 文件相同的体验[^2]。 #### 获取当前工作目录下的资源路径 对于那些依赖于特定位置的数据文件的应用场景来说,可以通过下面这段代码片段来确保无论从哪里导入都能正确找到所需资源的位置[^3]: ```python import os base_dir = os.path.dirname(os.path.abspath(__file__)) resource_path = os.path.join(base_dir, "some_resource.txt") with open(resource_path, mode='r', encoding='utf-8') as resource_file: content = resource_file.read() print(content) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值