【问题标题】:C# httpclient:An existing connection was forcibly closed by the remote hostC# httpclient:一个现有的连接被远程主机强行关闭
【发布时间】:2019-11-29 00:28:01
【问题描述】:

我正在使用 YoutubeExplode 代理从 youtube.com 下载视频。

public async Task<ApiResult<List<videoList>>> Search(string videoName)
{
    var res= new ApiResult<List<videoList>>(0,null,null);
    //set proxy
    HttpClientHandler handler = new HttpClientHandler()
    {
        Proxy = new WebProxy("myvps:port",false),
        UseProxy = true
    };
    using (var client = new HttpClient(handler))
    {
        YoutubeClient youtubeclient = new YoutubeClient(client);
        var list=await youtubeclient.SearchVideosAsync(videoName, 2);
        //convert 
        res.data = list.ToVideoList();
    }
    return res;
}

由于GFW,我带了一个VPS,安装了Squid(一个http代理服务器)并在Ubuntu16.04上像这样简单地配置了它

bash:"sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.original"

bash:"vim /etc/squid/squid.conf"

http_port 3128
http_access allow all

bash:"systemctl restart squid.service"

之后,当我运行 WebApi 时,我收到了错误消息:

<ExceptionMessage>
Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.
</ExceptionMessage>

我查看了 squid 日志

1563595921.406      2 117.152.169.17 TAG_NONE/500 0 CONNECT youtube.com:443 - HIER_DIRECT/172.217.5.78 -
1563595921.708      0 117.152.169.17 TAG_NONE/500 0 CONNECT youtube.com:443 - HIER_DIRECT/172.217.5.78 -
1563596804.825      3 117.152.169.17 TAG_NONE/500 0 CONNECT youtube.com:443 - HIER_DIRECT/172.217.14.110 -
1563596805.076      0 117.152.169.17 TAG_NONE/500 0 CONNECT youtube.com:443 - HIER_DIRECT/172.217.14.110

我想知道我的配置文件有什么问题。

所以我尝试了 bash:"curl -x vps_ip:port -L https://www.youtube.com",但它似乎奏效了。

查看日志

1563599971.588   2930 xxx_xxx_xxx_xxx TCP_TUNNEL/200 385942 CONNECT www.youtube.com:443 - HIER_DIRECT/172.217.14.110 -

请帮忙!

【问题讨论】:

    标签: c# ubuntu-16.04 dotnet-httpclient http-proxy squid


    【解决方案1】:

    对不起,如果这个答案没有帮助。但是我在 WCF 异步调用方面遇到了类似的问题。基本上我所做的是我对服务进行了异步调用,我没有等待结果。在finally 块有一个关闭的连接隐藏在我的视线之外。所以发生的事情是因为调用是异步调用,所以我可能在完成执行之前关闭了调用。

    【讨论】:

    • 可能你是对的,所以现在我应该做的是手动关闭连接或任何其他代码建议?
    • 你确定这是问题所在吗?我不确定,因为我对 WebApi 不太了解。你可以做的可能是使用 SearchVideosAsync 代替 SearchVideosAsync,你可以使用同步版本 SearchVideos。如果你不要在这里面对问题,那么我们已经确定了问题。
    猜你喜欢
    • 1970-01-01
    • 2016-11-06
    • 2021-05-12
    相关资源
    最近更新 更多