Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> HttpWebRequest и HttpWebResponse, обьясните на пальцах. 
V
    Опции темы
nikitao
Дата 16.12.2007, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: нет
Всего: 26



Всем привет.  Пытаюсь разобраться с классами из сабжа - что то не получается. 

Вот смотрите. 
Код

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://accounts.craigslist.org/");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string s = new StreamReader(response.GetResponseStream()).ReadToEnd();


И о ЧУДО в s у нас оказался HTML код нужной странички smile   Но вот дальше не понятно. Нужно заполнить элементы на форме. Но КАК ? делаю так. 

Код

          HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://accounts.craigslist.org/");
          request.Method = "POST";
          request.AllowAutoRedirect = false;
          string sQueryString = "loginType=L&step=confirmation&originalURI=%2Flogin&rt=&rp=&inputEmailHandle=nikitao%40alltube.ru&inputPassword=NESKAZUUUU";
          byte[] ByteArr = System.Text.Encoding.GetEncoding(1251).GetBytes(sQueryString);
          request.ContentLength = ByteArr.Length;
          request.GetRequestStream().Write(ByteArr, 0, ByteArr.Length);
          HttpWebResponse response = (HttpWebResponse)request.GetResponse();

По идее в Хедарах должны разные полезные вещи сохраняться. Куда там дальше  идти.  Но там все пусто. Тупняк короче. Жду помощи  smile

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

ЗЫ На статью на gotdotnet прошу не слать smile 


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
ishimcity
Дата 17.12.2007, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 1.6.2007
Где: Тюменская область . Ишим

Репутация: нет
Всего: 1



Что у тебя за проблема?
PM MAIL ICQ Skype YIM   Вверх
tol05
Дата 17.12.2007, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 6
Всего: 170



Цитата(nikitao @  16.12.2007,  20:04 Найти цитируемый пост)
Нужно заполнить элементы на форме. Но КАК ?

я когда-то через Microsoft.mshtml это делал. Что-то наподобие такого:
Код

InternetExplorer IE;
try
{
   IE = new InternetExplorer();

   IE.Visible = true;

   object Dummy = Type.Missing;
   IE.Visible = true;
   IE.Navigate("https://...", ref Dummy, ref Dummy, ref Dummy, ref Dummy);
}
catch(Exception)
{
      //  ...
}
FBusy(IE);
try
{
   Type IEType = Type.GetTypeFromProgID("InternetExplorer.Application");
   Object IEX = Activator.CreateInstance(IEType);
   IEType.InvokeMember("Visible", System.Reflection.BindingFlags.SetProperty, null, IEX, new object[] { true });

   HTMLInputElementClass log = ((HTMLDocument)IE.Document).all.item("tbLogin", 0) as TMLInputElementClass;
   HTMLInputElementClass pas = ((HTMLDocument)IE.Document).all.item("tbPassword", 0) as HTMLInputElementClass;
   log.value = "my_Login";
   pas.value = "my_Password";

   HTMLInputElementClass sub = ((HTMLDocument)IE.Document).all.item("btnSubmit", 0) as HTMLInputElementClass;
   sub.click();
}
catch(Exception)
{
      //  ...
}
FBusy(IE);
IE.Quit();

Код

//Не помню почему именно так. Не настаиваю на этом варианте :)
private static void FBusy(InternetExplorer IE)
{
   while(IE.Busy)
   {
        Thread.Sleep(100);
}



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Stepan_Lameroff
Дата 17.12.2007, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 16.12.2006

Репутация: 1
Всего: 14



Посмотрите  Login in to Password and HTTPS Protected Web Sites to Process HTML Forms with C#
Довольно удачный пример работы с HtmlAgilityPack
PM MAIL   Вверх
nikitao
Дата 17.12.2007, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: нет
Всего: 26



tol05, привет , у меня сейчас все приложение и работает на WebBrowser + Microsoft.mshtml. Хочу отказатьсяот этой практики т к 
1) не очень экономично по времени
2) Не экономично по памяти. У меня в 1 момент времени может грузиться до 1000 этих браузеров. И это все вылетает в большую капеечку в ОЗУ. 


Stepan_Lameroff, спасибо , посмотрю.


ishimcity,   В голобальном смысле вопрос звучит так. Как без использования WebBrowser и Microsoft.mshtml загрузить страничку , заполнить на ней формочки и отправить дальше.


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
Experimenter
Дата 18.12.2007, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: 1
Всего: 17



nikitao, 
Цитата

ЗЫ На статью на gotdotnet прошу не слать smile
а сюда отправить можно? Добавь строчку
Код

request.ContentType = "application/x-www-form-urlencoded";



--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
nikitao
Дата 22.12.2007, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: нет
Всего: 26



Ага. Спасибо. Почитаю.


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
nikitao
Дата 28.12.2007, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: нет
Всего: 26



вопрос остается открытым. Конкретный вопрос. почему не работает этот код :

Код

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://accounts.craigslist.org/login");
            request.Method = "POST";
            request.KeepAlive = true;
            request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11";
            request.Accept = "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
            request.AllowAutoRedirect = false;
            //request.Connection = "keep-alive";
            request.Headers.Add("Accept-Language", "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3");
            request.Headers.Add("Accept-Encoding", "gzip,deflate");
            request.Headers.Add("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.7");
            request.Headers.Add("Keep-Alive", "300");
            request.Referer = "https://accounts.craigslist.org/login";
            request.Headers.Add("Cookie", "cl_def_hp=stpetersburg; cl_def_lang=en");
            request.ContentType = "application/x-www-form-urlencoded";
            byte[] ByteArr = System.Text.Encoding.GetEncoding(1251).GetBytes("&loginType=L&step=confirmation&originalURI=%2Flogin&rt=&rp=&inputEmailHandle=nikitao%40alltube.ru&inputPassword=password");
            request.ContentLength = ByteArr.Length;
            request.GetRequestStream().Write(ByteArr, 0, ByteArr.Length);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            string result = new StreamReader(response.GetResponseStream()).ReadToEnd();
            Console.WriteLine(result);
            Console.ReadLine();


Это сообщение отредактировал(а) nikitao - 29.12.2007, 01:11


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
tol05
Дата 29.12.2007, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 6
Всего: 170



a почему не работает? Я сделал тестовый asp.net сайт с одной страницей
Default.aspx
Код

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
            <asp:Button ID="Button1" runat="server" Text="Button" />
    </div>
    </form>
</body>
</html>

Default.aspx.cs
Код

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
            foreach (string key in Request.Form.AllKeys)
            {
                Response.Write(key);
            }

    }
}

запустил твой код (url только поменял) и получил на консоль
Цитата

loginTypesteporiginalURIrtrpinputEmailHandleinputPassword

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
    Untitled Page
</title></head>
<body>
    <form name="form1" method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTQ2OTkzNDMyMWRk1Fi1UDSOoEHuENdgb/mCOtC3ucM=" />
</div>

    <div>
    <input type="submit" name="Button1" value="Button" id="Button1" />
    </div>
    
<div>

    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgK9ho7DDQKM54rGBiRV3VRMH0H2UF8kC51lN4ZGWxRa" />
</div></form>
</body>
</html>

зачит или разбирайся с Encoding твоего сайта, или с 
Код

"&loginType=L&step=confirmation&originalURI=%2Flogin&rt=&rp=&inputEmailHandle=nikitao%40alltube.ru&inputPassword=ge3moub"



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
nikitao
Дата 29.12.2007, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: нет
Всего: 26



ну да. код то в целом в том направлении..... но мне бы понять почему именно с craigslist не работает....просто очень срочно надо.... :( 


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
mr.DUDA
Дата 29.12.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 2
Всего: 232



Может оно через SSL (https://) не хочет коннектиться? В описании HttpWebRequest мсдн про SSL ничего нет?


--------------------
user posted image
PM MAIL WWW   Вверх
nikitao
Дата 30.12.2007, 02:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: нет
Всего: 26



проблема решилась. необходимо прописать : 
Код

request.ProtocolVersion = new Version(1, 0);


Добавлено через 41 секунду
и хз почему с 1.1 не работает smile 


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.5446 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.