gpt4 book ai didi

c# - 通过代理从 Azure Functions 连接到 REST API(c#)

转载 作者:行者123 更新时间:2023-12-03 04:01:42 25 4
gpt4 key购买 nike

我创建了一个 Azure 函数(C#、ASP.net core 3.1)(A),以通过 Squid 代理服务器访问 API(Azure 函数(B)),以将源端口更改为函数(B)。(配置信息如下所示。)

我可以通过代理访问Azure Function(B),但源端口没有改变。

当我访问 Function(B) 两次时,squid 代理服务器仅记录第一次访问。但是 Function(B) 记录了每次都是通过代理访问的。(记录了代理 IP 地址。)

请告诉我 Function(A) 和 Proxy 之间的连接发生了什么,以及如何更改 Function(A) 或鱿鱼配置。

┌────────────────────┐
│ Azure Function (A) │
└────────────────────┘


┌──────────────┐
│ Proxy Server │
└──────────────┘


┌────────────────────┐
│ Azure Function (B) │
└────────────────────┘

Function(A) 的代码在这里。

// startup.cs
// Setting DI and using Proxy
[...]
public override void Configure(IFunctionsHostBuilder builder)
{
[...]
builder.Services.AddHttpClient<IApiCallLogic, ApiCallLogic>(c => { })
.ConfigurePrimaryHttpMessageHandler(() =>
{
var handler = new HttpClientHandler { UseProxy = true };
handler.Proxy = new WebProxy($"http://xxx.xxx.xxx.xxx:xxx"); // proxy's IP & port
return handler;
});
}
// call REST API Logic with DI
class ApiCallLogic : IApiCallLogic
{
private HttpClient httpClient;

public ApiCallLogic(HttpClient httpClient)
{
this.httpClient = httpClient ?? throw new ArgumentNullException(nameof(httpClient));
}

public async Task<HttpResponseMessage> CallApi(string url, ILogger log)
{
var reqMessage = new HttpRequestMessage(HttpMethod.Get, url);
var response = await httpClient.SendAsync(reqMessage);
return response;
}
}

而squid.conf是这样的。

# allow Function IP
acl function_net src xxx.xxx.xxx.xxx
http_access allow function_net

# deny others
http_access deny all

# no cache
cache deny all

# set port
http_port xxxx

forwarded_for off

# persistent connection setting
server_persistent_connections off
client_persistent_connections on
<小时/>
  • asp.net 核心 3.1.2
  • 鱿鱼v3.5.27
  • squid 服务器操作系统:ubuntu 18.04
    • squid 服务器是 Azure VM

最佳答案

这个问题我自己解决了。当我访问外部API而不是Function(B)时,不同请求的源端口是不同的。我认为相同源端口的原因是 Azure Functions 返回值为 keep-alive 的连接 header 。

关于c# - 通过代理从 Azure Functions 连接到 REST API(c#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62055911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com