2014-01-24 2 views
0

Привет Я пытаюсь выполнить автоматический автоматический вход в API PHP из другого домена, который принимает данные журнала из POST.Переадресация после получения HttpWebResponse

Я испытал АНИ~D, используя простой PHP, который отправляет параметры через пост метода, используя приведенный ниже код и был успешно перенаправлен на сайт авторизован.

<html> 
<body> 
<form action="http://anotherdomain.com/index.php" method="POST"> 
Username: <input type="text" name="user" value="testuser" hidden><br> 
Password: <input type="text" name="passw" value="hashedpassword"><br> 
API Login: <input type="text" name="apiuser" value="apiuser"><br> 
API PASS: <input type="text" name="apiuser" value="apipass"><br> 
<input type="submit" value="Autologin"> 
</form> 
</body> 
</html> 

Теперь я хочу сделать это на коде позади. Я пробовал код ниже, но не смог перенаправить.

 string sAPIUser = "apiuser"; 
     string sAPIPassword = "apipass"; 
     string sURL = "http://anotherdomain.com/index.php"; 
     HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(sURL); 
     string hashPassword = tbPassword.Text.Trim(); 

     string postData = "user=" + tbUserName.Text.Trim().ToUpper() + "&passw=" + hashPassword + "&apiuser=" + sAPIUser + "&apipass=" + sAPIPassword; 

     byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
     webRequest.Method = "POST"; 
     webRequest.ContentType = "application/x-www-form-urlencoded"; 
     webRequest.ContentLength = byteArray.Length; 
     webRequest.AllowAutoRedirect = true; 
     Stream dataStream = webRequest.GetRequestStream(); 
     dataStream.Write(byteArray, 0, byteArray.Length); 
     dataStream.Close(); 
     HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); 
     dataStream = webResponse.GetResponseStream(); 
     StreamReader reader = new StreamReader(dataStream); 
     string sResponse = reader.ReadToEnd(); 
     reader.Close(); 
     webResponse.Close(); 

     //when displayed to label displays HTML code from site successfully logged in 
     lMessage.Text = sResponse; 

Когда я прочитал sResponse на HTML Visualizer показывает, что пользователь успешно вошел в систему, но когда я добавить «Response.Redirect (Surl);» он перенаправляется на сайт, но не входит в систему. Как я могу автоматически перенаправить страницу после получения ответа, например, кода PHP выше. Пожалуйста помоги. Благодарю. Код vb.net тоже в порядке.

+0

Вы должны передать «маркер доступа», что вы получите от вызовите WebRequest. Вероятно, это файл cookie, который вы должны установить с помощью 'Response.Cookies [" name_of_cookie "] =" value "' перед тем, как выполнить перенаправление. Но трудно дать вам полный ответ, не зная, как работает аутентификация. Если вы разместите дополнительную информацию об этом, то, вероятно, легко ответить точно, что вам нужно сделать. –

ответ

0

В виде HTML у вас есть поле ввода имени APILOGIN, но при создании строки PostData в своем коде вы называете его apiuser

+0

О, извините, я просто набрал неправильное имя поля, но при условии, что имя поля и параметры верны, есть ли какая-либо коррекция кода? на HTML Visualizer он показывает, что пользователь успешно вошел в систему, но я хочу перенаправить страницу в другой домен. Заранее спасибо. – user3069317

+0

вам нужно будет использовать cookieContainer, похожий на это: http://stackoverflow.com/a/1027594/1552094 Я никогда не использовал это, прежде чем так не могу помочь. Надеюсь, это поможет вам на правильном пути – Geezer68

Смежные вопросы