在我的同事在互联网上搜索了将近2天之后,我找不到可以帮助我的解决方案...这就是我需要你帮助的原因:)
我的问题在于webRequest可以连接到银行网站,使用Id和密码连接,获取一些信息并将它们还给我。
到现在为止,我为一家银行做了它并且工作得很好,但是我需要和另一家银行合作,对于新银行,我之前做过的事情不想工作。
最大的问题是我尝试连接的wbesite给出的请求的响应,我有一个:“远程服务器返回错误:(403)禁止。 我看到互联网上的很多人都遇到了webRequest和403错误的问题,并尝试了所有可能的事情。 无论我尝试什么,设置默认标题,我自己做的标题或其他任何我得到此错误。即使我的ID&密码是假我收到此错误,所以我甚至无法连接到该网站。
我现在的理论是,我正在尝试连接到我无法访问的剧目页面,并且我的HttpHeader是在连接的URI之后,是不可能的,也不起作用对于这家银行。
我也尝试更改线程时间(看看他们是否拒绝访问,因为连接不是人) 我试图pu用户代理,它什么都没改变。 可以帮助我的东西:我可以像以前一样在uri中传递连接信息吗?或者还有另一种方法可行吗?
PS:如果您需要其他或更精确的信息,请不要犹豫。
这是代码。
感谢您的帮助。
public static List<Compte> requeteBank(PopUpWebRequest popup)
{
List<Compte> listeCompte = new List<Compte>();
ASCIIEncoding encoding = new ASCIIEncoding();
string contentHTTPHeader = "_cm_user" + id + "&_cm_pwd" + password;
byte[] data = encoding.GetBytes(contentHTTPHeader);
string urlConnexion = "https://www.bank.fr/identification/default.cgi"; // This URI doesn't exist, this is for the example
HttpWebRequest requeteConnexion = (HttpWebRequest)WebRequest.Create(urlConnexion);
//I even tried with this method
// I left this here to show you how I made this
//string authInfo = popup.identifiant + ":" + popup.password;
//requeteConnexion.Headers["Authorization"] = "Basic " + authInfo;
//var response = requeteConnexion.GetResponse();
//authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
//The form for the Id & Password is a Method POST
requeteConnexion.Method = "POST";
Stream connexionStream = requeteConnexion.GetRequestStream();
// Sending connection data...
connexionStream.Write(data, 0, data.Length);
connexionStream.Close();
requeteConnexion.CookieContainer = new CookieContainer();
requeteConnexion.AllowAutoRedirect = false;
HttpWebResponse reponseConnexion = (HttpWebResponse)requeteConnexion.GetResponse(); // Error 403
//Id from the cookies
Cookie idSession = reponseConnexion.Cookies["IdSes"];
reponseConnexion.Close();
[ The rest of the code.... ]
答案 0 :(得分:0)
好消息,我发现了我的问题,所以我给出了完整的答案,可能会帮助将来的某个人:) 谢谢所有帮助过我的人!
我的程序中缺少两个正常工作的东西。
首先,所有银行都不一样,即使它们来自同一个子公司,也不会使用相同的HTTP标头。 所以我在Mozilla Firefox中使用了一个插件https://addons.mozilla.org/fr/firefox/addon/live-http-headers/来显示网站的标题和手动连接时的响应。
有了这个,我在创建请求时添加了很多不同的信息,这些信息都在银行网站的标题中:
requeteConnexion.Method = "POST";
requeteConnexion.ContentType = "application/x-www-form-urlencoded";
requeteConnexion.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0";
requeteConnexion.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9*/*;q=0.8";
requeteConnexion.KeepAlive = true;
我的第二个错误是string contentHTTPHeader = "_cm_user" + id + "&_cm_pwd" + password;
我删除了名称和值之间的空格,我忘了放一个&#34; =&#34;在名字之后。
好的路线是
string contentHTTPHeader = "_cm_user="+id+"&_cm_pwd="+password;
。
对于想要知道的人来说,&#34; _cm_user =&#34;等等...来自,我可以看到当我手动连接的插件时,这是如何在标头中发送的ID和密码,我只需要在我的代码中添加完全相同的东西。
希望这可以提供帮助。