PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Как реализовать в программе запрос на сайт, скажем, авторизацию


Как реализовать в программе запрос на сайт, скажем, авторизацию

Сообщений 1 страница 20 из 20

1

Подскажите как реализовать в программе запрос на сайт, например, на авторизацию. В теории я понимаю как все происходит: передаешь параметры запроса на желаемую страницу, потом получаешь куки и анализируешь результаты. В примере я создал набросок интерфейса для авторизации например на http://purebasic.mybb.ru/  Как именно передать эти данные?

Код:
;
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #String_0
  #Text_1
  #Text_3
  #String_1
  #Text_5
  #Text_7
  #Button_0
EndEnumeration

;- Fonts
Global FontID1
FontID1 = LoadFont(1, "Times New Roman", 8)
Global FontID2
FontID2 = LoadFont(2, "Times New Roman", 6)
Global FontID3
FontID3 = LoadFont(3, "Times New Roman", 7)
Global FontID4
FontID4 = LoadFont(4, "Times New Roman", 16)

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 395, 273, 146, 141, "Запрос",  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
    If CreateGadgetList(WindowID(#Window_0))
      StringGadget(#String_0, 70, 35, 70, 20, "", #PB_String_Password | #PB_String_Numeric)
      TextGadget(#Text_1, 10, 15, 40, 15, "Логин:")
      TextGadget(#Text_3, 10, 40, 45, 15, "Пароль:")
      StringGadget(#String_1, 70, 10, 70, 20, "", #PB_String_Numeric)
      TextGadget(#Text_5, 75, 65, 60, 15, "Результат:")
      TextGadget(#Text_7, 10, 90, 125, 40, "", #PB_Text_Center)
      SetGadgetFont(#Text_7, FontID4)
      ButtonGadget(#Button_0, 10, 60, 55, 20, "Войти")
      
    EndIf
  EndIf
EndProcedure

Open_Window_0()

Repeat
event=WaitWindowEvent()
Until event=#PB_Event_CloseWindow

0

2

Здесь есть несколько примеров http://purebasic.info/phpBB2/viewtopic.php?t=1092

0

3

Я понял не так это просто. На Алгоритме конечно упращено все, но то же суть такая же. Вот на форуме обсуждали тоже, если интересно.

0

4

Пишет что файл на серврере отсутствует!
Можно у двух словах, как это реализовано на Алгоритме.

0

5

http://s47.radikal.ru/i118/1006/2d/5659dc8e1eac.jpg
Открой полностью картинку.
Конечно в Алгоритме стиль чуть другой но вообщем так: по скрину поймешь что из текстовых гаджетов (объектов) данные передаются по адресу Ссылка запроса = "http://win.mail.ru/cgi-bin/auth" . Затем принимаются куки и если все верно идет перенаправление в ящик. Все упращено для пользователей. Ни какого программирования нет. Просто подставляй данные и все. Желательно проект вручную просмотреть. Тебе наверно так не очень понятно.

0

6

Если на Алгоритме всё так просто - сделай не нём программу, авторизирующуюся на этом форуме.
И выложи код. Думать будем...

0

7

Попробую сейчас.

0

8

Что то с этим форумом проблем много, из 20 раз получилось зайти пару всего. На яндексе авторизовался спокойно и зашел на почту. Вообщем суть отправки запроса такая: как было сказано с помощью утилитки для перехвата данных для мазилы узнаем все аргументы, посылаемые в запросе.
http://s55.radikal.ru/i148/1006/5b/c89bfb0ca247.jpg
Сам запрос посылается по адресу http://purebasic.mybb.ru/login.php?action=in, то есть ссылка запроса эта. Далее нужно указать содержание запроса. Совокупность всех аргументов при авторизации на этом форуме будет следующей: (метод запроса POST)
form_sent=1&redirect_url=&req_username=daiomik&req_password=XXXXX&login=%C2%EE%E9%F2%E8, где %C2%EE%E9%F2%E8 как я понял - это закодированный мой логин, то есть daiomik.
Главным условием для удачной авторизации является обязательное написание всех аргументов, находящихся в правом столбце на рисунке. И их количество на каждом сайте разное. Например на почте яндексе их 2: только логин и пароль.
Проблема при авторизации на данном форуме как я понял следующего плана: на том месте, где прописывается закодированный логин, должен быть логин того человека, который заходит, то есть нужно узнать этот символьный код, подставить и все будет ок. (это я так думаю)
Далее, если нас после отправки запроса перенаправляют (ссылка перенаправления), то мы зашли, если нет, то где то ошибка.
Получается для каждого сайта нужны индивидуальные данные и аргументы, которые нужно находить методом проб и ошибок.

0

9

daiomik написал(а):

%C2%EE%E9%F2%E8 как я понял - это закодированный мой логин, то есть daiomik.

Нет, это слово Войти

0

10

Пётр написал(а):

это слово Войти

хм..точно. Я ж на кнопку Войти жал. Ну тогда меньше проблем. Я так понял что в PB можно отправлять запросы и тп. Какая ветка справки за это отвечает. А то разобраться хочется

0

11

daiomik написал(а):

Какая ветка справки за это отвечает.

Network

0

12

Петр! Пытаюсь сделать программку по этому же принципу который ты применил здесь! Но столкнулся с проблемой с которой борюсь уже практически неделю! С помощью программы HttpAnalyzerStdV6 отследил какой HTTP запрос отсылается в IE , отсылаю запрос но ответа от сервера не следует! Вот исходник:

Код:
get.s="GET /php/bashorgru/HTTP/1.1"+Chr(10)+Chr(10)
Acc.s="text/plain;q=0.8,*/*;q=0.5"+Chr(10)+Chr(10)
Acl.s="ru"+Chr(10)+Chr(10)
Ace.s="gzip, deflate"+Chr(10)+Chr(10)

zapros.s=get+Acc+Acl+Ace

InitNetwork()
connect=OpenNetworkConnection("www.zergalius.ru", 80)
if connect 
   SendNetworkString(connect,zapros)
   *mem=AllocateMemory(100000)
 
if NetworkClientEvent(connect) =#PB_NetworkEvent_Data
   ReceiveNetworkData(connect,*mem,100000)
   otvet.s=PeekS(*mem)
endif
MessageRequester("",otvet)
Endif

Помоги если можешь! :-)

0

13

Дмитрий написал(а):

Дмитрий

я могу ошибаться, но может. чтобы проще было разобраться, распиши задачу свою, что-то мне не понятен, приведённый тобой, запрос (я уже молчу про перенос каретки)...

0

14

На странице "www.zergalius.ru/php/bashorgru/" выводятся случайные цитаты с сайта баш.орг! Я хочу получить текст этой страницы отправив http запрос! Вот собственно и все что я хочу! Впринципе с какой страницы получить текст или какие другие данные без разницы, главная моя задача это научиться пользоваться http запросами ГРАМОТНО!!! Если можешь , то пожалуйста научи! :-)

0

15

Дмитрий написал(а):

www.zergalius.ru/php/bashorgru/

ну для начала посоветую не привязываться к сайту www.zergalius.ru , так как зачем тебе сторонняя заморочка, ты лучше сам придумай алгоритм получения/вывода рандомного прикола с баша.
Домой прийду, если никто не выложит до меня,  состряпаю примерчик получения ответа от сайта, а то на работе у меня прокся, заморочки много (с прямым коннектом к инету попроще работать/тестить).

Отредактировано Adrenalin (08.11.2010 16:35:59)

0

16

чтобы далеко не ходить, вот вроде бы по теме6
http://purebasic.info/phpBB2/viewtopic. … light=html

0

17

Запутался с работой с памятью, вернее не всё понимаю.
Возможно, как-то, вывести информацию построчно напрямую, не создавая
сам файл и как ?
Или надо создавать файл ?

Код:
; http://yp.shoutcast.com/sbin/newxml.phtml   запрос 
#file=1
InitNetwork()
connect=OpenNetworkConnection("yp.shoutcast.com", 80)

If connect 
   SendNetworkString(connect,"GET /sbin/newxml.phtml/ HTTP/1.0" + Chr(10) + Chr(10))
   *Mem=AllocateMemory(100000)
   ReceiveNetworkData(connect,*Mem,100000)
   HTML.s = PeekS(*Mem)
   
    MessageRequester("",HTML)
    
  ;OpenFile(#file,"Temp.txt")
   ;FileSeek(#file, 0)  ; с позиция 0
   ;WriteStringN(#file,HTML)  ;  перезаписуем построчно
     ;FileSeek(#file, 0) ; с позиция 0
       ;While Eof(#file)=0 
        ;Debug ReadString(#file) ;  читаем по строчно
       ;Wend
   ;CloseFile(#file)  
EndIf

0

18

И в полученном запросе не вся информация, часть потеряна.
Пробовал увеличить выделенную память - не помогло.

Прочитать построчно можно таким образом, но не знаю правильно или нет.

Код:
; http://yp.shoutcast.com/sbin/newxml.phtml   запрос 
#file=1
InitNetwork()
connect=OpenNetworkConnection("yp.shoutcast.com", 80)

If connect 
   SendNetworkString(connect,"GET /sbin/newxml.phtml/ HTTP/1.0" + Chr(10) + Chr(10))
   *Mem=AllocateMemory(1000000)
   ReceiveNetworkData(connect,*Mem,1000000)
   HTML.s = PeekS(*Mem)

   Result = CountString(HTML, Chr(10)) ; колличество переходов
   For a=0 To Result
      poz= FindString(HTML, Chr(10), 1);Ищет подстроку и возвращаем ее позицию
      stroka.s= Left(HTML, poz) ; Возвращает строку с лева, количество символов = poz
      Debug stroka
     HTML= Right(HTML,Len(HTML)-Len(stroka)) ; удаляем из строки (HTML.s - stroka.s)
   Next
 
EndIf

0

19

Код:
И в полученном запросе не вся информация, часть потеряна.

Может она блокируется (ввод пользователя-пароль......).

0

20

ну как минимум могу предположить (по крайней мере когда пытался сделать прокси-сервер, этот момент у меня получился):

Ваш (все пытаются получать одинаково) код:

Код:
SendNetworkString(connect,"GET /sbin/newxml.phtml/ HTTP/1.0" + Chr(10) + Chr(10))
   *Mem=AllocateMemory(1000000)
   ReceiveNetworkData(connect,*Mem,1000000)
   HTML.s = PeekS(*Mem)

тут пара моментов:
1) Вы уверены что за время прохождения в вашем коде от SendNetworkString до ReceiveNetworkData сервер (connect,"GET /sbin/newxml.phtml/ HTTP/1.0") успевает наполнить (проходин всего лишь несколько микросекунд) данными Вашу, выделенную память??
2) Вы уверены что сервер посылает пакеты именно такими объемами которые вы выделяете в своей программе для получения данных от сервера (вы ведь ни один лазает по этому серверу, да и размеры таких паетов есть только у неопытных сайтостроителей, кот. еще не отконфигурячили свои ВЭБ-ресурсы)

Для меня выходом в данной ситуации (пока только один вижу) это получать, при каждом проходе цикла, небольшими "порциями" а вот до каких пор получать, это я уже бы с интересом послушал от тех у кого мозг шевелиться пошустрее чем у меня...   :)

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Как реализовать в программе запрос на сайт, скажем, авторизацию