EDIT: I added generosity if someone can help me figure out what I'm doing wrong, all yours.
Besides, I don't care how this is done. If there is a library that can help, or something like that, that would be great.
Since there is no Captcha involved, I should theoretically be able to log into Flickr and add a contact through code similar to the following ... correct?
When I run this code and many of its variants, when I get to the place where I have to submit the form in order to verify that I am adding a contact, it asks me to enter. The only thing that could have been my failure to collect the correct cookie?
I have an IEHTTPHeader for IE to see what is really going on, and I try to imitate it. I just can't find where I'm wrong if I just don't understand anything.
Flickr API cannot do this
All I want to do is log in and add a predefined contact.
//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;
}
source
share