c# HttpWebRequest 使用代理访问网页,在vs中release调试的时候可以,直接运行出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# HttpWebRequest 使用代理访问网页,在vs中release调试的时候可以,直接运行出错相关的知识,希望对你有一定的参考价值。

如题,
在release调试的时候有时代理密码错误也能返回得到 StatusCode.OK ,有时候不行,正确的情况,有时候返回超时,
但是我找到相应release目录下的exe 文件进行执行的时候,报错如下

System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: 以一种访问权限不允许的方式做了一个访问套接字的尝试。 XX.XXX.XXX.XXX at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.GetResponse()
at XXXX.cs XXXX() at XX line

请问这个怎么解决

这个问题虽然没有遇到,但是我觉得原因

    可能就是调试运行时给程序了足够时间运行代码,但是如果直接运行可能时间不够导致超时或获取不到正确的数据,因为正确数据还没有返回您已经执行它后面的代码,请看您程序有没有牵扯异步操作,如果有就改成同步操作是否可以。

    Unable to connect to the remote server  可能是无法连接服务器造成的超时。连接方式是否合法和是否有权限访问。

追问

1.肯定不是在时间上的关系,因为我在release的时候没有断点,也一样行,执行exe的时候无论怎么样都是直接报这个错

参考技术A 重没遇到过,直接编译就通过了追问

直接编译时通过了,运行就报错了

参考技术B 看起来像是跨域访问的问题

C# 利用HttpWebRequest进行HTTPS的post请求的示例

最近一个推送信息的目标接口从http格式换成https格式,原来的请求无法正常发送,所以修改了发送请求的方法.标红的代码是新加了,改了之后就可以正常访问(不检测证书的)

 

public static string PostData3(string posturl, string postData, Encoding encoding)
{
Stream outstream = null;
Stream instream = null;
StreamReader sr = null;
HttpWebResponse response = null;
HttpWebRequest request = null;

byte[] data = encoding.GetBytes(postData);
// 准备请求...
try
{
// 设置参数
if (posturl.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
ServicePointManager.ServerCertificateValidationCallback =
new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(posturl) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10;
}
else {
request = WebRequest.Create(posturl) as HttpWebRequest;
}

CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;
request.AllowAutoRedirect = true;
request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = data.Length;
// request.TransferEncoding = encoding.HeaderName;
outstream = request.GetRequestStream();
outstream.Write(data, 0, data.Length);
outstream.Close();
//发送请求并获取相应回应数据
response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才开始向目标网页发送Post请求
instream = response.GetResponseStream();
sr = new StreamReader(instream, encoding);
//返回结果网页(html)代码
string content = sr.ReadToEnd();
string err = string.Empty;
return content;
}
catch (Exception ex)
{
string err = ex.Message;
LogHelper.Error("Post第三方地址" + posturl, ex);
return string.Empty;
}
}

 

private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}

以上是关于c# HttpWebRequest 使用代理访问网页,在vs中release调试的时候可以,直接运行出错的主要内容,如果未能解决你的问题,请参考以下文章

用HttpWebRequest通过代理,访问https时出错??

C# HttpWebRequest访问页面时自动识别编码

C# HttpWebRequest访问页面时自动识别编码

c# .net 后台的httpwebrequest方法可以跨域访问吗?

C# HttpWebRequest 绝技 根据URL地址获取网页信息

C#使用HttpWebRequest请求url出现远程服务器返回一个错误:401未经授权