:: Visual Foxpro, Foxpro for DOS
HTTP заголовок
AntonV
Автор

Сообщений: 50
Откуда: Верхняя Пышма
Дата регистрации: 06.01.2014
Добрый день!
для скачивания интернет страниц я использую функцию URLDownloadToFile in urlmon.dll. Возникла необходимость авторизоваться при помощи ключа. Можно мне ту же функцию использовать для передачи HTTP-заголовка Authorization:123456 ? Как параметр в строке адреса страницы? Или надо как-то по другому?


------------------
Ratings: 0 negative/0 positive
Re: HTTP заголовок
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
На фоксе нет (там только через COM интерфейсы можно поменять заголовки, а такие интерфейсы фокс не может напрямую реализовать).
По идее через "MSXML2.XMLHTTP" объект можно напрямую задать заголовки. "Скачать файл" используя этот компонент тоже не составляет труда - разве что на пару строк больше кода. Зато можно не в файл его помещать, а например в блолб-поле в таблице записывать, или сразу же "разбирать", т.к. он в памяти будет...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: HTTP заголовок
AntonV
Автор

Сообщений: 50
Откуда: Верхняя Пышма
Дата регистрации: 06.01.2014
нашел тут пример

LOCAL XMLHTTP, ADOStream, cFile

cFile = 'C:\test2\example.txt'

XMLHTTP = CREATEOBJECT("Msxml2.XMLHTTP")
XMLHTTP.Open("GET", "https://abcd", .F.)
XMLHTTP.setRequestHeader("Authorization", "123456")

XMLHTTP.send
IF XMLHTTP.statustext = "OK"
ADOStream = CreateObject("ADODB.Stream")
ADOStream.type = 1
ADOStream.Open
ADOStream.Write(XMLHTTP.responseBody)
ADOStream.SaveToFile(cFile, 2)
ADOStream.Close
ADOStream = NULL
ENDIF
XMLHTTP = NULL

С обычной страницей без авторизации и без строки XMLHTTP.setRequestHeader("Authorization", "123456") получилось создать файл. А с нужной страницы и с этой строкой не получается. Может неправильно заголовок устанавливаю?
Ratings: 0 negative/0 positive
Re: HTTP заголовок
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Authorization вообще-то специальный заголовок, и там не должно быть никаких 123456 - там для basic авторизации будет нечто типа
"Basic YWxhZGRpbjpvcGVuc2VzYW1l" - название метода, и через пробел завёрнутый в base64 текст вида "логин:пароль".
В фоксе соответственно такой заголовок можно соорудить через
"Basic " + STRCONV(m.login + ":" + m.pass, 13)
Если же там не basic авторизация - ну надо смотреть как правильно формировать заголовок для такого типа авторизации...

P.S. Для сохранения принятого содержимого в файл совершенно не требуется плясок вокруг ADODB.Stream - можно напрямую через STRTOFILE сохранить принятые данные в файл - если их таки нужно сохранять в файл По крайней мере в 9-м фоксе.


------------------
WBR, Igor




Исправлено 1 раз(а). Последнее : Igor Korolyov, 20.04.17 20:45
Ratings: 0 negative/0 positive
Re: HTTP заголовок
AntonV
Автор

Сообщений: 50
Откуда: Верхняя Пышма
Дата регистрации: 06.01.2014
123456 это условные числа, сам ключ примерно такого вида, как вы пишите
в примере у них вот что

$url = "https://api.content.market.yandex.ru/v2/geo/suggest?geo_id=213&name_part=мос";
$headers = array(
"Host: api.content.market.yandex.ru",
"Accept: */*",
"Authorization: <авторизационный_ключ>"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$data = curl_exec($ch);
curl_close($ch);
Ratings: 0 negative/0 positive
Re: HTTP заголовок
AntonV
Автор

Сообщений: 50
Откуда: Верхняя Пышма
Дата регистрации: 06.01.2014
логина и пароля не дали, доступ только с конкретного IP адреса
Ratings: 0 negative/0 positive
Re: HTTP заголовок
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Если там именно Basic токен, то через STRCONV(, 14) можно получить обратно в plaintext виде логин и пароль.
Вообще примеры запросов с авторизацией указывают логин/пароль дважды. Сначала в методе Open (там ещё 2 параметра есть - именно логин и пароль), а потом и явно пробитым заголовком Authorization.
На твоём месте я бы для начала посмотрел что за статус возвращается в запросе (status даёт числовой код, statustext - "расшифровку"). Возможно что там будет информация об ошибке.
В примере говорится про заголовок Accept - может в нём проблема... Host, насколько я помню, сам контрол пропишет исходя из URL-а. Он вообще несколько заголовков сам формирует...

P.S. В реальной программе после .Send() требуется цикл ожидания - опрос свойства .readyState и DOEVENTS (а для надёжности ещё и апишный Sleep() или хотя бы фоксовый Inkey(0.1) ) в самом цикле. Сразу смотреть status не стоит... Конечно при тестировании в командном окне этим можно обычно пренебречь - пока набираешь следующую команду, уже пройдёт достаточно времени для завершения запроса


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: HTTP заголовок
AntonV
Автор

Сообщений: 50
Откуда: Верхняя Пышма
Дата регистрации: 06.01.2014
логина и пароля не дали, по конкретному IP доступ. А statustext пишет Method Not Allowed. Может действительно нет прав на использование этого метода. Другой метод попробую.
Ratings: 0 negative/0 positive
Re: HTTP заголовок
AntonV
Автор

Сообщений: 50
Откуда: Верхняя Пышма
Дата регистрации: 06.01.2014
Другие методы попробовал - тот же результат. Видимо авторизация все-таки проходит, разрешений не хватает.
Ratings: 0 negative/0 positive
Re: HTTP заголовок
AntonV
Автор

Сообщений: 50
Откуда: Верхняя Пышма
Дата регистрации: 06.01.2014
Прошел запрос. Спасибо за советы.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 22 alex;  (Гостей: 21)

© 2000-2024 Fox Club 
Яндекс.Метрика