отправка данных с помощью HttpWebRequest со страницы входа - PullRequest
6 голосов
/ 02 февраля 2011

Я пытаюсь отправить данные для этой страницы с помощью класса HttpWebRequest:

www.stage1.darotools.com/Quran.v1.admin/_FormsWizard/CreateForm.asp

но я столкнулся с проблемой аутентификации при входе. вот мой код:

    System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
    string postData = "ctlMessageID=" + 348;
    postData += ("&ctlUserID=" + 7);
    postData += ("&ctlTitle=" + 7);
    postData += ("&ctlEmail=" + "rrawhi@gmail.com");
    postData += ("&ctlIsSystem=" + 0);
    postData += ("&ctlFormBody=");
    postData += ("&ctlEnableCaptcha=");
    postData += ("&ctlEmailAttachedFiles=");
    postData += ("&ctlMailingList=");
    postData += ("&ctlCommentaryTitle=" + 1);
    postData += ("&ctlIsActive=" + 2);
    postData += ("&ctlCommentaryPersonID=" + 6);
    postData += ("&ctlOrderKey=");
    postData += ("&Commentary_TextControl_html=" + "aaaaaaaaaaaa");
    postData += ("&controlValue4=" + 666666);
    postData += ("&ctlLanguageID=" + 1);
    postData += ("&ctlAya=" + 349);
    postData += ("&PathInfo=" + "dbsFramed, dbsFramed");
    postData += ("&Caller=" + "rawhi");
    byte[] data = encoding.GetBytes(postData);

    // Prepare web request...
    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://stage1.darotools.com/Quran.v1.admin/_FormsWizard/CreateForm.asp");
    myRequest.Method = "POST";
    myRequest.ContentType = "application/x-www-form-urlencoded";
    myRequest.ContentLength = data.Length;
    Stream newStream = myRequest.GetRequestStream();
    // Send the data.
    newStream.Write(data, 0, data.Length);
    newStream.Close();

А это страница входа в систему:

www.stage1.darotools.com/Quran.v1.admin/Login.asp

Заранее спасибо.

Ответы [ 4 ]

4 голосов
/ 21 февраля 2011

Во-первых, похоже, что вы на самом деле не отправляете запрос. Чтобы отправить POST-запрос на сервер, вам необходимо запросить ответ:

HttpWebResponse response = (HttpWebResponse)myRequest.GetResponse();
string responseContent = null;
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
 {
    //get the text content of the response, if needed
    responseContent = reader.ReadToEnd();
 }

Кроме того, похоже, что страница, на которую вы отправляете сообщение, ищет установленный и аутентифицированный сеанс. Попробуйте опубликовать учетные данные на странице входа (сначала http://stage1.darotools.com/Quran.v1.admin/Login.asp). Установите для HttpWebRequest.CookieContainer новый экземпляр CookieContainer (). Затем сделайте еще одну публикацию на странице CreateForm.asp, но обязательно установите новый объект HttpWebRequest.CookieContainer для использования тот же экземпляр CookieContainer, который вы использовали, когда выполняли процедуру POST для страницы входа в систему, затем файлы cookie, полученные со страницы входа, будут отправлены на страницу CreateForm.asp, и сессия будет «поддерживаться» с точки зрения сервера. Например:

CookieContainer m_cookies = new CookieContainer();
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://stage1.darotools.com/Quran.v1.admin/Login.asp");
...

HttpWebResponse response = (HttpWebResponse)myRequest.GetResponse();
HttpWebRequest formRequest = (HttpWebRequest)WebRequest.Create("http://stage1.darotools.com/Quran.v1.admin/_FormsWizard/CreateForm.asp");
formRequest.CookieContainer = myRequest.CookieContainer;
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
 {
    //get the text content of the response, if needed
    responseContent = reader.ReadToEnd();
 }
1 голос
/ 15 февраля 2011

Попробуйте использовать:

myRequest.Credentials = new NetworkCredential("username", "password", "domain"); // domain is not needed in case of forms authentication

Если это не сработает, вы можете аутентифицировать пользователя на странице входа и передать туда CookieContainer, а затем повторно использовать этот CookieContainer при запросе нужной страницы.

0 голосов
/ 15 февраля 2011

Здесь может происходить несколько разных вещей

Попробуйте установить некоторые учетные данные

myRequest.Credentials = CredentialCache.DefaultCredentials;

// if we have a proxy set its creds as well
if( myRequest.Proxy != null )
{
     myRequest.Proxy.Credentials = CredentialCache.DefaultCredentials;
}

И убедитесь, что вы также устанавливаете настройки UserAgent и Accpet.

myRequest.UserAgent = "Foo";
myRequest.Accept = "*/*";

Если вы добавите их, я не думаю, что у вас возникнут какие-либо проблемы.

0 голосов
/ 15 февраля 2011
...