purebasic.info

PureBasic forum
Текущее время: Чт июн 04, 2020 4:18 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Сб май 18, 2013 12:53 pm 
Не в сети
ассистент

Зарегистрирован: Пт май 17, 2013 10:25 am
Сообщений: 12
Откуда: Челябинск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Задача состоит в том чтобы отправить файл на Yandex.Disk. Но Я пока не могу разобраться как вообще отправлять запросы на 443 порт. А можно взглянуть на код, где вы авторизуетесь?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб май 18, 2013 2:21 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6609
Благодарил (а): 34 раз.
Поблагодарили: 230 раз.
Пункты репутации: 61
Где то написано, что если нет возможности работать с портом 443, то можно авторизироваться по 80 -му. И это работает.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
InitNetwork()
 
Procedure.s GetHeader(Packet$,Name$)
  ProcedureReturn Mid(Packet$,FindString(Packet$,Name$)+Len(Name$)+2,FindString(Packet$,#CRLF$,FindString(Packet$,Name$))-(FindString(Packet$,Name$)+Len(Name$)+2))
EndProcedure
 
Procedure.s HTTPPost(server$,port.l,vars$,headers$,timeout.l=6000)
  Protected con.l
  Protected head$
  Protected part$
  Protected ret.l
  Protected bytes.l
  Protected timer.l
  Protected buffer$
  Protected response$
  con=OpenNetworkConnection(GetURLPart(server$,#PB_URL_Site),port,#PB_Network_TCP);,timeout)
  If con
    ;build header
    head$="POST /"+GetURLPart(server$,#PB_URL_Path)
    If Len(GetURLPart(server$,#PB_URL_Parameters))>0 : head$=head$+"?"+GetURLPart(server$,#PB_URL_Parameters) : EndIf
    head$=head$+" HTTP/1.1"+#CRLF$
    If Len(headers$)>0 : head$=head$+headers$ : EndIf
    head$=head$+"Host: "+GetURLPart(server$,#PB_URL_Site)+#CRLF$
    head$=head$+"Accept: */*"+#CRLF$
    If CountString(headers$,"Content-Type:")=0 : head$=head$+"Content-Type: application/x-www-form-urlencoded"+#CRLF$ : EndIf
    head$=head$+"Connection: keep-alive"+#CRLF$
    head$=head$+"Content-Length: "+Str(Len(vars$))+#CRLF$
    head$=head$+#CRLF$
    ;send header
    timer=ElapsedMilliseconds()
    Repeat
      If ret>0
        ;send remaining
        part$=Mid(head$,ret,Len(head$))
        bytes=SendNetworkData(con,@part$,Len(part$))
      Else
        ;start sending
        bytes=SendNetworkData(con,@head$,Len(head$))
      EndIf
      If bytes<>-1 : ret=ret+bytes : EndIf
      If ElapsedMilliseconds()-timer>=timeout : CloseNetworkConnection(con) : ProcedureReturn "" : EndIf
    Until ret=Len(head$)
    ret=0
    ;send content
    timer=ElapsedMilliseconds()
    Repeat
      If ret>0
        ;send remaining
        part$=Mid(vars$,ret,Len(vars$))
        bytes=SendNetworkData(con,@part$,Len(part$))
      Else
        ;start sending
        bytes=SendNetworkData(con,@vars$,Len(vars$))
      EndIf
      If bytes<>-1 : ret=ret+bytes : EndIf
      If ElapsedMilliseconds()-timer>=timeout : CloseNetworkConnection(con) : ProcedureReturn "" : EndIf
    Until ret=Len(vars$)
    ret=0
    ;receive response
    timer=ElapsedMilliseconds()
    Repeat
      Delay(100)
      Select NetworkClientEvent(con)
        Case #PB_NetworkEvent_Data
          buffer$=Space(14500)
          bytes=ReceiveNetworkData(con,@buffer$,Len(buffer$))
          buffer$=Left(buffer$,bytes)
          If bytes<>-1 : response$=response$+buffer$ : EndIf
          ;check for end of response
          If (bytes<14500 And bytes<>-1)
            If CountString(response$,"Transfer-Encoding: chunked")=0
              If CountString(response$,"Content-Length")>0 And Len(Mid(response$,FindString(response$,#CRLF$+#CRLF$,1)+4))=Val(GetHeader(response$,"Content-Length"))
                Break
              EndIf
            Else
              ;chunk handling
              timer=ElapsedMilliseconds()
            EndIf
          EndIf
      EndSelect
      ;this will handle both chunked and timeouts
      If ElapsedMilliseconds()-timer>=timeout : CloseNetworkConnection(con) : Break : EndIf
    ForEver
    CloseNetworkConnection(con)
  EndIf
  ProcedureReturn response$
EndProcedure
 
SetClipboardText(HTTPPost("https://passport.yandex.ru/passport?mode=auth",80,"login=RealLogon&passwd=RealPass",""))
 



При правильном Логине-пароле получишь в буфер обмена авторизацию. ( по понятным причинам не привожу тут ответ сервера :D )

При не правильном получишь код 200 + будет такой ответ ( кроме всего прочего, там ещё много чего понаписано):

Цитата:
Яндекс



Неправильная пара логин-пароль!
Авторизоваться не удалось.

Проверьте раскладку клавиатуры, не нажата ли клавиша «Caps Lock» и попробуйте ввести логин и пароль еще раз.


Вход
логин
пароль
запомнить меня (что это)
Зарегистрироваться
Вспомнить пароль

© 2001—2013 «Яндекс»

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re:
СообщениеДобавлено: Пт май 15, 2020 6:22 am 
Не в сети
док
Аватар пользователя

Зарегистрирован: Вт ноя 22, 2016 7:59 am
Сообщений: 85
Откуда: Россия/Пятигорск
Благодарил (а): 0 раз.
Поблагодарили: 17 раз.
Пункты репутации: 0
Подскажите пожалуйста, как средствами пурика загружать/выгружать файлы с Яндекс.Диска в винде?

lakomet писал(а):
Во вложении, то что получилось на данном этапе.
Проверял только на лине, под виндой работать должно, только наврядтли в винде, это кому то нужно.
Для тех кто захочет протестировать, нужно зарегистрировать приложение на ЯД-е -> http://passport.yandex.ru/passport?mode=auth&retpath=https%3A//oauth.yandex.ru/client/my, после регистрации получить токен -> http://api.yandex.ru/oauth/doc/dg/tasks/get-oauth-token.xml, вставить полученный токен в исходник main.pb, ну и собственно пробовать, раскоментировав, любой из блоков в файле main.pb
Если кто-то будет тестить, просьба отписаться о скорости закачки файлов на ЯД, т.к. или у меня инет тупит(при 15М/б, закачивается со скоростью 0,5М/б :evil: ), или курл тупит :?

Это пример у меня почему-то не работает.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB