HTTP заголовок | |
---|---|
AntonV Автор Сообщений: 50 Откуда: Верхняя Пышма Дата регистрации: 06.01.2014 |
Добрый день!
для скачивания интернет страниц я использую функцию URLDownloadToFile in urlmon.dll. Возникла необходимость авторизоваться при помощи ключа. Можно мне ту же функцию использовать для передачи HTTP-заголовка Authorization:123456 ? Как параметр в строке адреса страницы? Или надо как-то по другому? ------------------ |
Re: HTTP заголовок | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
На фоксе нет (там только через COM интерфейсы можно поменять заголовки, а такие интерфейсы фокс не может напрямую реализовать).
По идее через "MSXML2.XMLHTTP" объект можно напрямую задать заголовки. "Скачать файл" используя этот компонент тоже не составляет труда - разве что на пару строк больше кода. Зато можно не в файл его помещать, а например в блолб-поле в таблице записывать, или сразу же "разбирать", т.к. он в памяти будет... ------------------ WBR, Igor |
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") получилось создать файл. А с нужной страницы и с этой строкой не получается. Может неправильно заголовок устанавливаю? |
Re: HTTP заголовок | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Authorization вообще-то специальный заголовок, и там не должно быть никаких 123456 - там для basic авторизации будет нечто типа
"Basic YWxhZGRpbjpvcGVuc2VzYW1l" - название метода, и через пробел завёрнутый в base64 текст вида "логин:пароль". В фоксе соответственно такой заголовок можно соорудить через
P.S. Для сохранения принятого содержимого в файл совершенно не требуется плясок вокруг ADODB.Stream - можно напрямую через STRTOFILE сохранить принятые данные в файл - если их таки нужно сохранять в файл По крайней мере в 9-м фоксе. ------------------ WBR, Igor Исправлено 1 раз(а). Последнее : Igor Korolyov, 20.04.17 20:45 |
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); |
Re: HTTP заголовок | |
---|---|
AntonV Автор Сообщений: 50 Откуда: Верхняя Пышма Дата регистрации: 06.01.2014 |
логина и пароля не дали, доступ только с конкретного IP адреса
|
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 |
Re: HTTP заголовок | |
---|---|
AntonV Автор Сообщений: 50 Откуда: Верхняя Пышма Дата регистрации: 06.01.2014 |
логина и пароля не дали, по конкретному IP доступ. А statustext пишет Method Not Allowed. Может действительно нет прав на использование этого метода. Другой метод попробую.
|
Re: HTTP заголовок | |
---|---|
AntonV Автор Сообщений: 50 Откуда: Верхняя Пышма Дата регистрации: 06.01.2014 |
Другие методы попробовал - тот же результат. Видимо авторизация все-таки проходит, разрешений не хватает.
|
Re: HTTP заголовок | |
---|---|
AntonV Автор Сообщений: 50 Откуда: Верхняя Пышма Дата регистрации: 06.01.2014 |
Прошел запрос. Спасибо за советы.
|
© 2000-2024 Fox Club  |