РЕДАКТИРОВАТЬ: Я добавил награду, если кто-то может помочь мне выяснить, что я делаю неправильно, все ваше.
Кроме того, мне все равнокак это делаетсяЕсли есть библиотека, которая может помочь, или что-то в этом роде, было бы замечательно.
Поскольку здесь нет никакой капчи, я теоретически должен иметь возможность войти в Flickr и добавить контакт черезкод, подобный следующему ... правильный?
Когда я запускаю этот код и много его вариантов, когда добираюсь до места, где я должен отправить форму, чтобы убедиться, что я добавляю контакт,он просит меня войти в систему. Единственная вещь, которая может быть моей неудачей - собрать правильный cookie?
У меня есть IEHTTPHeader для IE, чтобы посмотреть, что на самом деле происходит, и я стараюсь изо всех сил подражать ему.Я просто не могу найти, где я иду не так, если я просто не понимаю что-то.
Flickr API не может этого сделать
Все, что я хочу сделать, - это войти в систему и добавить предопределенный контакт.
//This Kicks off the process
private void button2_Click(object sender, EventArgs e)
{
string user = "adampeditto"; //Some Random Guy
CookieContainer cookies = new CookieContainer();
cookies = LoginYahoo(cookies, user);
cookies = GetCookies(cookies, user);
cookies = ClickFlickrButton(cookies, user);
}
private CookieContainer ClickFlickrButton(CookieContainer cookies, string user)
{
try
{
string appURL = "http://www.flickr.com/people/" + user + "/relationship";
string strPostData = "magic_cookie=a9dd9cd9fd23081f35b8bad2c0ba1878&done=1";
// Setup the http request.
HttpWebRequest wrWebRequest = WebRequest.Create(appURL) as HttpWebRequest;
wrWebRequest.Method = "POST";
wrWebRequest.Timeout = 10000;
wrWebRequest.ContentLength = strPostData.Length;
wrWebRequest.ContentType = "application/x-www-form-urlencoded";
CookieContainer cookieContainer = cookies;
wrWebRequest.CookieContainer = cookieContainer;
// Post to the login form.
StreamWriter swRequestWriter = new
StreamWriter(wrWebRequest.GetRequestStream());
swRequestWriter.Write(strPostData);
swRequestWriter.Close();
// Get the response.
HttpWebResponse hwrWebResponse = (HttpWebResponse)wrWebRequest.GetResponse();
// Read the response
StreamReader srResponseReader = new StreamReader(hwrWebResponse.GetResponseStream());
string strResponseData = srResponseReader.ReadToEnd();
srResponseReader.Close();
return cookieContainer;
}
catch (Exception ex)
{
throw ex;
}
}
private CookieContainer LoginYahoo(CookieContainer cookies, string user)
{
string loginName = "YourLoginName";
string password = "YourPassword";
string appURL = "https://login.yahoo.com/config/login?.src=flickr&.pc=5134&.scrumb=0&.pd=c%3DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-&.intl=us&.done=https%3A%2F%2Flogin.yahoo.com%2Fconfig%2Fvalidate%3F.src%3Dflickr%26.pc%3D5134%26.scrumb%3D0%26.pd%3Dc%253DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-%26.intl%3Dus%26.done%3Dhttp%253A%252F%252Fwww.flickr.com%252Fsignin%252Fyahoo%252F%253Fredir%253D%25252Fpeople%25252F" + user + "%25252Frelationship%25252F&rl=1";
string strPostData = ".tries=1&.src=flickr&.md5=&.hash=&.js=&.last=&promo=&.intl=us&.bypass=&.partner=&.u=0delt5h5l4df0&.v=0&.challenge=3DZF0DFFqdE0m.9MWnCq6LjUZ9gV&.yplus=&.emailCode=&pkg=&stepid=&.ev=&hasMsgr=1&.chkP=Y&.done=https%3A%2F%2Flogin.yahoo.com%2Fconfig%2Fvalidate%3F.src%3Dflickr%26.pc%3D5134%26.scrumb%3D0%26.pd%3Dc%253DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-%26.intl%3Dus%26.done%3Dhttp%253A%252F%252Fwww.flickr.com%252Fsignin%252Fyahoo%252F%253Fredir%253D%25252Fpeople%25252F" + user + "%25252Frelationship%25252F&.pd=flickr_ver%3D0%26c%3DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-%26ivt%3D%26sg%3D&login=" + loginName + "&passwd=" + password + "&.persistent=y&.save=Sign+In";
// Setup the http request.
HttpWebRequest wrWebRequest = WebRequest.Create(appURL) as
HttpWebRequest;
wrWebRequest.AllowAutoRedirect = true;
wrWebRequest.Method = "POST";
wrWebRequest.ContentLength = strPostData.Length;
wrWebRequest.ContentType = "application/x-www-form-urlencoded";
CookieContainer cookieContainer = cookies;
wrWebRequest.CookieContainer = cookieContainer;
// Post to the login form.
StreamWriter swRequestWriter = new
StreamWriter(wrWebRequest.GetRequestStream());
swRequestWriter.Write(strPostData);
swRequestWriter.Close();
// Get the response.
HttpWebResponse hwrWebResponse = (HttpWebResponse)wrWebRequest.GetResponse();
// Read the response
StreamReader srResponseReader = new
StreamReader(hwrWebResponse.GetResponseStream());
string strResponseData = srResponseReader.ReadToEnd();
srResponseReader.Close();
//YOU ARE NOW LOGGED IN TO YAHOO!
ShowInBrowser(strResponseData);
return cookieContainer;
}
//These are the places it sends you upon autoredirect after your run LoginYahoo(), if you set AutoRedirect to true there should be no need for this...
private CookieContainer GetCookies(CookieContainer cookies, string user)
{
CookieContainer cookieContainer = cookies;
string appURL = "http://login.yahoo.com/config/validate?.src=flickr&.pc=5134&.scrumb=6l14Ni2Pz3j&.pd=c%3DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-&.intl=us&.done=http%3A%2F%2Fwww.flickr.com%2Fsignin%2Fyahoo%2F%3Fredir%3D%252Fpeople%252F" + user + "%252Frelationship%252F";
HttpWebRequest wrWebRequest = WebRequest.Create(appURL) as HttpWebRequest;
wrWebRequest.CookieContainer = cookieContainer;
wrWebRequest.AllowAutoRedirect = false;
HttpWebResponse hwrWebResponse = (HttpWebResponse)wrWebRequest.GetResponse();
appURL = "http://flickr.com/signin/yahoo/?redir=%2Fpeople%2F" + user + "%2Frelationship%";
HttpWebRequest wrWebRequest2 = WebRequest.Create(appURL) as HttpWebRequest;
wrWebRequest2.CookieContainer = cookieContainer;
wrWebRequest2.AllowAutoRedirect = false;
HttpWebResponse hwrWebResponse2 = (HttpWebResponse)wrWebRequest2.GetResponse();
appURL = "http://flickr.com/cookie_check.gne?pass=%2Fpeople%2F" + user + "%2Frelationship%2F&fail=register_cookies.gne";
HttpWebRequest wrWebRequest3 = WebRequest.Create(appURL) as HttpWebRequest;
wrWebRequest3.CookieContainer = cookieContainer;
wrWebRequest3.AllowAutoRedirect = true;
HttpWebResponse hwrWebResponse3 = (HttpWebResponse)wrWebRequest3.GetResponse();
return cookieContainer;
}