我已经看到了其他一些线索,但尚未找到解决方案。从调试模式运行我的C#Windows From时,我可以使用WebClient从网页中读取数据。但是,只要我为应用程序创建可执行文件,我就无法从网页中读取数据。这是我得到的例外:
System.Net.WebException:底层连接已关闭:发送时发生意外错误。 ---> System.IO.IOException:无法从传输连接读取数据:远程主机强制关闭现有连接。 ---> System.Net.Sockets.SocketException:远程主机强制关闭现有连接 在System.Net.Sockets.Socket.Receive(Byte []缓冲区,Int32偏移量,Int32大小,SocketFlags socketFlags) 在System.Net.Sockets.NetworkStream.Read(Byte []缓冲区,Int32偏移量,Int32大小)
---内部异常堆栈跟踪结束---
以下是我正在使用的代码片段:
WebClient webClient = new WebClient();
webClient.UseDefaultCredentials = true;
webClient.Proxy.Credentials = CredentialCache.DefaultCredentials;
webClient.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");
string page = webClient.DownloadString(webPath + manPartNum);
就像我之前说过的,我能够在Visual Studio的调试模式下正常工作,但是一旦我创建了可执行文件,我就再也无法从网页上读取。任何帮助,将不胜感激。可能导致这个问题的原因是什么?
答案 0 :(得分:0)
另一种方法是使用HttpWebRequest
代替:
String responseFromServer = null;
var url = webPath + manPartNum;
var request = (HttpWebRequest)HttpWebRequest.Create(urlPing);
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";
var response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
using (var dataStream = response.GetResponseStream())
{
using (var reader = new StreamReader(dataStream))
responseFromServer = reader.ReadToEnd();
}
}
if (!String.IsNullOrEmpty(responseFromServer))
{
}
除非你真的"登录"在页面中,您可能不需要使用WebClient
。如果您只需要请求页面响应,那么这应该避免所有这些身份验证问题。
答案 1 :(得分:0)
经过更多研究后,我能够确定我尝试访问的网站具有OAuth 2.0身份验证和授权。看起来我必须在公司注册并使用他们的API通过我的应用程序访问他们的网站。希望这有助于其他人。