Перейти к содержимому

Как сделать доступным файл по http

  • автор:

Использование HTTP-файлов в Visual Studio 2022

Редактор файлов Visual Studio 2022 .http предоставляет удобный способ тестирования проектов ASP.NET Core, особенно приложений API. Редактор предоставляет пользовательский интерфейс, который:

  • Создает и обновляет .http файлы.
  • Отправляет HTTP-запросы, указанные в .http файлах.
  • Отображает ответы.

В этой статье содержится документация по следующим причинам:

  • Синтаксис .http файла.
  • Использование редактора .http файлов.
  • Создание запросов в .http файлах с помощью Обозреватель конечных точек Visual Studio 2022.

Формат .http файла и редактор были вдохновлены расширением клиента Visual Studio CodeREST. Редактор Visual Studio 2022 .http распознает .rest как альтернативное расширение файла для того же формата файла.

Необходимые компоненты

  • Visual Studio 2022 версии 17.6 или более поздней версии с установленной рабочей нагрузкой ASP.NET и веб-разработки .

.http Синтаксис файла

В следующих разделах объясняется .http синтаксис файла.

Комментарии

Строки, начинающиеся с любого или # // являются комментариями. Эти строки игнорируются при отправке HTTP-запросов Visual Studio.

Переменные

Строка, начинающаяся с @ определения переменной с помощью синтаксиса @VariableName=Value .

На переменные можно ссылаться в запросах, определенных позже в файле. Они ссылаются путем упаковки их имен в двойные фигурные скобки, > . В следующем примере показаны две переменные, определенные и используемые в запросе:

@hostname=localhost @port=44320 GET https://>:>/weatherforecast 

Переменные можно определить с помощью значений других переменных, которые были определены ранее в файле. В следующем примере используется одна переменная в запросе вместо двух, показанных в предыдущем примере:

@hostname=localhost @port=44320 @host=>:> GET https://>/api/search/tool 

Запросы

Формат HTTP-запроса — HTTPMethod URL HTTPVersion это все в одной строке, где:

  • HTTPMethod — это метод HTTP, используемый, например:
    • OPTIONS
    • GET
    • HEAD
    • POST
    • PUT
    • PATCH
    • DELETE
    • TRACE
    • CONNECT

    Файл может содержать несколько запросов с помощью строк с ### разделителями. Следующий пример с 3 запросами в файле иллюстрирует этот синтаксис:

    GET https://localhost:7220/weatherforecast ### GET https://localhost:7220/weatherforecast?date=2023-05-11&location=98006 ### GET https://localhost:7220/weatherforecast HTTP/3 ### 

    Заголовки запросов

    Чтобы добавить один или несколько заголовков, добавьте каждый заголовок в собственную строку сразу после строки запроса. Не включать пустые строки между строкой запроса и первым заголовком или между последующими строками заголовков. Формат представлен HeaderName: Value , как показано в следующих примерах:

    GET https://localhost:7220/weatherforecast Date: Wed, 27 Apr 2023 07:28:00 GMT ### GET https://localhost:7220/weatherforecast Cache-Control: max-age=604800 Age: 100 ### 

    При вызове API, выполняющего проверку подлинности с заголовками, не фиксируйте секреты в репозитории исходного кода.

    Текст

    Добавьте текст запроса после пустой строки, как показано в следующем примере:

    POST https://localhost:7220/weatherforecast Content-Type: application/json Accept-Language: en-US,en;q=0.5 < "date": "2023-05-10", "temperatureC": 30, "summary": "Warm" >### 

    Неподдерживаемый синтаксис

    В редакторе файлов Visual Studio 2022 .http нет всех функций, которые имеет расширение клиента Visual Studio CodeREST. В следующем списке перечислены некоторые из более важных функций, доступных только в расширении Visual Studio Code:

    • Необязательный метод HTTP
    • Строка запроса, которая охватывает несколько строк
    • Именованные запросы
    • Динамические переменные
    • Файлы среды
    • Укажите путь к файлу в виде текста запроса
    • Смешанный формат для текста при использовании многопартийных или форм-данных
    • Запросы GraphQL
    • Запрос cURL
    • Копирование и вставка как cURL
    • Журнал запросов
    • Сохранение текста ответа в файл
    • Проверка подлинности на основе сертификата
    • Переменные запроса
    • Системные переменные
    • Настройка предварительной версии ответа
    • Параметры для каждого запроса

    Использование редактора .http файлов

    .http Создайте файл с помощью диалогового окна «Добавить новый элемент» или переименовав расширение любого текстового файла .http в . Отправьте запрос, нажав зеленую кнопку «Выполнить» слева от запроса. Ответ отображается в отдельной области.

    Создание файла .http

    Add New Item dialog showing HTTP File type selected.

    • В Обозреватель решений щелкните правой кнопкой мыши проект ASP.NET Core.
    • В контекстном меню выберите «Добавить>новый элемент«.
    • В диалоговом окне «Добавить новый элемент» выберите ASP.NET Core >General.
    • Выберите HTTP-файл и нажмите кнопку «Добавить«.

    Отправка HTTP-запроса

    .http file editor window with

    • Добавьте хотя бы один запрос в .http файл и сохраните файл.
    • Если URL-адрес запроса указывает на localhost и порт проекта, запустите проект перед отправкой запроса в него.
    • Нажмите зеленую кнопку «Выполнить» слева от отправленного запроса. Запрос отправляется по указанному URL-адресу, а ответ отображается в отдельной области справа от окна редактора.

    Использование конечных точек Обозреватель

    Конечные точки Обозреватель — это окно инструментов в Visual Studio 2022, которое предоставляет пользовательский интерфейс, который интегрируется с редактором .http файлов для тестирования HTTP-запросов.

    Открытие конечных точек Обозреватель

    Выберите «Просмотреть>другие конечные точки Windows>» Обозреватель.

    Добавление запроса в .http файл

    Щелкните правой кнопкой мыши запрос в конечных точках Обозреватель и выберите «Создать запрос«.

    Endpoints Explorer window showing request context menu with

    • .http Если файл с именем проекта в качестве имени файла существует, запрос добавляется в этот файл.
    • .http В противном случае файл создается с именем проекта в качестве имени файла, а запрос добавляется в этот файл.

    На предыдущем снимке экрана показаны конечные точки, определенные минимальным шаблоном проекта API. В следующем примере показан запрос, созданный для выбранной конечной точки:

    @ApiApplication1_HostAddress = http://localhost:5155 Get >/todos/ ### 

    Отправьте запрос, как описано ранее в этой статье.

    См. также

    • Конечные точки Обозреватель окне распознает только литеральные строки для маршрутов
    • Разработка веб-API в Visual Studio 2022
    • Расширение клиента Visual Studio Code REST

    Совместная работа с нами на GitHub

    Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

    Invoke-WebRequest: Отправка HTTP запросов, загрузка файлов и обработка HTML веб-страниц в PowerShell

    date

    12.07.2022

    user

    itpro

    directory

    PowerShell, Windows 10, Windows Server 2019

    comments

    комментариев 39

    Командлет Invoke-WebRequest можно использовать для обращения к HTTP/HTTPS/FTP ресурсам прямо из консоли PowerShell. С помощью этой команды вы можете отправить HTTP запросы, скачивать файлы с любых веб-сайтов, парсить HTML веб-страницы, заполнять и отправлять веб-формы. В этой статье мы рассмотрим несколько базовых примеров использования командлета Invoke-WebRequest для работы с веб-сервисами.

    Получить содержимое веб-страницы с помощью командлета Invoke-WebRequest

    Командлет Invoke-WebRequest доступен в Windows начиная с версии PowerShell 3.0. Командлет Invoke-WebRequest позволяет отправить HTTP запрос с методом GET к указанной веб странице и получить ответ от севера.

    В Windows есть два алиаса для команды Invoke-WebRequest: iwk и wget .

    Выполните следующую команду:

    Invoke-WebRequest -Uri «https://winitpro.ru»

    получить html код страницы Invoke-WebRequest с помощью powershell

    Совет. Если вы подключены к Интернет через прокси-сервер, нужно правильно настроить PowerShell для доступа через прокси-сервер.

    Команда загрузила страницу и отобразила ее содержимое в консоли PowerShell. Возвращенный ответ представляет собой не просто HTML код страницы. Командлет Invoke-WebRequest возвращает объект типа HtmlWebResponseObject. Такой объект представляет собой набор коллекции форм, ссылок, изображений и других важных элементов HTML документа. Посмотрим все свойства данного объекта:

    $WebResponseObj = Invoke-WebRequest -Uri «https://winitpro.ru»
    $WebResponseObj| Get-Member

    свойства объекта HtmlWebResponseObject

    Чтобы получить сырой HTML код веб страницы, который содержится в данном объекте, выполните:

    Вы можете вывести HTML код страницы вместе с HTTP заголовками, которые вернул веб сервер:

    powershell: получить html код страницы и http заголовки

    Можно получить только код ответа веб-сервера и HTTP заголовки HTML страницы:

    Как вы видите, веб сервер вернул ответ 200, т.е. запрос выполнен успешно и веб сервер доступен и работает корректно.

    Key Value --- ----- Transfer-Encoding chunked Connection keep-alive Vary Accept-Encoding,Cookie Strict-Transport-Security max-age=31536000; Cache-Control max-age=3, must-revalidate Content-Type text/html; charset=UTF-8 Date Mon, 11 Jul 2022 08:18:05 GMT Server nginx/1.20.2 X-Powered-By PHP/5.6.40

    Чтобы получить время последней модификации веб-страницы:

    $WebResponseObj.ParsedHtml | Select lastModified

    получить время последнего изменения lastmodified веб страницы

    Вы можете указать строку User Agent при подключении к веб-ресурсу. В PowerShell есть набор встроенных строк User Agent:

    invoke-webRequest -Uri $uri -userAgent ([Microsoft.PowerShell.Commands.PSUserAgent]::Chrome)

    Список доступных агентов можно вывести так:

    powershell изменить useragent в запросе

    Либо вы можете задать собственную строку:

    Invoke-WebRequest -Uri $uri -UserAgent ‘MyApplication/1.1’

    Использование Invoke-WebRequest с аутентификацией

    Для доступа к некоторым веб ресурсам нужно выполнить аутентификацию. Вы можете использовать различные типы аутентификации совмести с командлетом Invoke-WebRequest (базовую, NTLM, Kerberos или аутентификацию по сертификату).

    Для выполнения базовой аутентификации (Basic auth, аутентификация по имени и паролю зашифрованным в base64) сначала нужно получить имя пользователя и пароль:

    $cred = Get-Credential
    wget -Uri ‘https://site.com’ -Credential $cred

    Для использования текущих учетных данных пользователя Windows для выполнения NTLM или Kerberos аутентификации, используйте параметр UseDefaultCredentials:

    Invoke-WebRequest ‘http://site.com’ -UseDefaultCredentials

    DefaultCredentials не работает с Basic аутентфикацией.

    Для аутентификации по сертификату, нужно указать его отпечаток:

    Invoke-WebRequest ‘http://site.com’ -CertificateThumbprint xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    Вы можете использовать современную Bearer/OAuth аутентификацию с помощью токена в ваших PowerShell скриптах.

      Сначала нужно получить токен OAuth у вашего провайдера REST API

    Парсинг HTML страниц с помощью Powershell

    Командлет Invoke-WebRequest позволяет довольно быстро и удобно парсить содержимое любых веб-страниц. При обработке HTML страницы из ее содержимого формируются коллекции ссылок (links), веб-форм (forms), изображений (images), скриптов (scripts) и т.д.

    Рассмотрим, как обратиться к конкретным объектам на веб-странице. Например, мы хотим получить список всех исходящих ссылок (объекты HREF) на полученной веб-странице:

    $SiteAdress = «http://winitpro.ru»
    $HttpContent = Invoke-WebRequest -URI $SiteAdress
    $HttpContent.Links | Foreach

    Invoke-WebRequest вывести список ссылок на html странице

    Чтобы получить и сам текст ссылки (содержится в элементе InnerText), можно воспользоваться такой конструкцией:

    $HttpContent.Links | fl innerText, href

    Можно выбрать только ссылки с определенным CSS классом:

    $HttpContent.Links | Where-Object | fl innerText, href

    Или определенным текстом в url:

    $HttpContent.Links | Where-Object | fl innerText,href

    powershell фильтр объектов на html странице

    Теперь рассмотрим, как получить все изображения на данной странице:

    Сформируем коллекцию из полных url путей к используемым изображениям:

    $images = $Img.Images | select src

    Инициализируем новый экземпляр класса WebClient:

    $wc = New-Object System.Net.WebClient

    И скачаем все изображения со страницы (с оригинальными именами) в каталог c:\tools\:

    Пример парсинга html страницы на powershell

    С помощью Invoke-WebRequest можно узнать внешний IP адреса компьютера из PowerShell через специальный веб-сервис.

    Как скачать файл по HTTP с помощью PowerShell?

    Invoke-WebRequest позволяет скачивать файлы с указанной веб-страницы или ftp сайта (работает как аналог Wget или cURL для Windows). Допустим, вы хотите скачать с HTTP сайта файл. Выполните такую команду PowerShell:

    wget «https://download-installer.cdn.mozilla.net/pub/firefox/releases/102.0.1/win64/en-US/Firefox%20Setup%20102.0.1.exe» -outfile “c:\tools\firefox_setup.exe”

    windows: скачать файл по http с помощью wget из powershell

    Этак команда скачает файл с HTTP сайта и поместит его в указанный каталог.

    Так же вы можете скачать файлы с веб-сервера Windows при помощи BITS в синхронном режиме.

    Вы можете получить размер файла в Мб перед его загрузкой:

    $url = «https://download-installer.cdn.mozilla.net/pub/firefox/releases/102.0.1/win64/en-US/Firefox%20Setup%20102.0.1.exe»
    (Invoke-WebRequest $url -Method Head).Headers.’Content-Length’/1Mb

    invoke-webrequest: получить размер файла перед его загрузкой

    Ниже приведен пример PowerShell скрипта, который найдет все ссылки на *.pdf файлы на веб странице и скачает все найденный файлы с сайта на ваш компьютер (каждый файл сохраняется под произвольным именем):

    $OutDir=»C:\Downloads\docs\PDF»
    $SiteAdress = «https://www.site.ru/free-pdf-books/»
    $HttpContent = Invoke-WebRequest -URI $SiteAdress
    $HttpContent.Links | Where-Object | %

    В современных версиях PowerShell Core (6.1 и выше) команделт Invoke-WebRequest поддерживает режим докачки. Обновите вашу версию PowerShell Core и вы можете использовать опцию Resume в команде Invoke-WebRequest для автоматического возобновления загрузки файла при проблемах на канале или недоступности сервера.

    Заполнение и отправка веб-форм на Powershell

    Многие веб-сервисы для работы требуют ввода различных данных в HTML формы. С помощью Invoke-WebRequest можно получить доступ к любой HTML-форме, заполнить необходимые поля и передать заполненную форму обратно на сервер. В этом примере мы покажем, как с помощью Powershell авторизоваться в почтовом ящике популярного российского сервиса mail.ru через его стандартную веб форму.

    powershell аутентификация с помощью веб форм на mailru

    С помощью следующей конструкции сохраним информацию о куках (Cookies) подключения в отдельной сессионной переменной:

    $mailru = Invoke-WebRequest https://e.mail.ru/login -SessionVariable session

    Следующей командой отобразим список заполняемых полей в HTML форме авторизации (форма называется LoginExternal):

    Присвоим нужные значения всем полям:

    Чтобы передать заполненную форму на веб сервер, вызовем атрибут HTML-формы action.

    $Log = Invoke-WebRequest -method POST -URI («https://e.mail.ru/login» + $mailru.Forms[«LoginExternal»].Action) -Body $mailru.Forms[«LoginExternal»].Fields -WebSession $session

    Также вы можете использовать формат JSON для отправки данных на веб страницу через метод POST:

    Invoke-WebRequest: игнорировать проверку SSL/TLS сертификатов

    Командлет Invoke-WebRequest тесно связан с Internet Explorer. Например, в редакциях Windows Server Core, в которых IE не установлен (или удален), командлет Invoke-WebRequest использовать нельзя.

    Invoke-WebRequest : The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer’s first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again.

    Вместо Invoke-WebRequest можно использовать класс WebClient:
    (New-Object -TypeName ‘System.Net.WebClient’).DownloadFile($Url, $FileName)

    Если на HTTP сайте используется некорректный SSL сертификат, или PowerShell не поддерживает этот тип протокола TLS, то командлет Invoke-WebRequest отказывается получать данные с него.

    Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
    Invoke-WebRequest : Запрос был прерван: Не удалось создать защищенный канал SSL/TLS.
    Invoke-WebRequest : The request was aborted: Could not create SSL/TLS secure channel.

    Invoke-WebRequest Не удалось создать защищенный канал SSL/TLS

    По умолчанию в Windows PowerShell (ранние билды Windows 10, Windows Server 2016 и более старые версии Windows) для подключения используется устаревший и небезопасный протокол TLS 1.0 (см. статью об ошибке установки PowerShell модуля: Install-Module: Unable to download from URI).

    Если в Windows не отключены протоколы TLS 1.0 и TLS 1.1, нужно выполнить следующую команду, чтобы в текущей сессии PowerShell для подключения использовался протокол TLS 1.2:

    Если вам нужно игнорировать самоподписанный сертификат SSL сертификат, используйте следующий PowerShell код:
    add-type @»
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    public class TrustAllCertsPolicy : ICertificatePolicy public bool CheckValidationResult(
    ServicePoint srvPoint, X509Certificate certificate,
    WebRequest request, int certificateProblem) return true;
    >
    >
    «@
    $AllProtocols = [System.Net.SecurityProtocolType]’Ssl3,Tls,Tls11,Tls12′
    [System.Net.ServicePointManager]::SecurityProtocol = $AllProtocols
    [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
    $result = Invoke-WebRequest -Uri «https://site.ru»

    В версиях PowerShell Core у командлета Invoke-WebRequest доступен параметр –SkipCertificateCheck, который позволяет игнорировать некорректные сертификаты.

    Еще один существенный недостаток командлета Invoke-WebRequest — довольно низкая скорость работы. HTTP поток при загрузке файла целиком буферизируется в память, и только после окончания полной загрузки сохраняется на диск. Таким образом, при загрузке больших файлов вы можете столкнутся с нехваткой памяти.

    Предыдущая статьяПредыдущая статья Следующая статья Следующая статья

    HFS Http-сервер на вашем компьютере

    Практически у всех возникала потребность передать полезные файлы. И прекрасно, если файл небольшого размера. Прикрепил его к письму и дело с концом. А если файл большого размера? В этой статье я покажу как для таких целей сделать полноценный веб-сервер для Windows.

    Напомню, что у публичных почтовых сервисов имеется ограничение на размер прикрепленного файла. Что-то примерно 10-25 Мб. А у нас, допустим, видео-файл с празднованием дня рождения, файл размера 900 Мб. Можно воспользоваться архиватором и разбить файл на многотомный архив. Получиться 36 частей (если архив по 25 Мб делать), которые нужно будет все их надо прикрепить и отправить. Долго и неудобно.

    Есть другой способ – закачать файл на файлообменник. Но особенность этих файловых сервисов такова – чтобы увидеть ссылку на файл нужно или заплатить сервису, или просмотреть рекламу и скачать с низкой скоростью. Файл 900Мб. от туда может качать около 6 часов.

    Выручил нас Массима Мелино (Rejetto), разработчик из солнечной Италии, написавший маленькую программку HFS, то бишь Http File Server. Изначально программа разрабатывалась для публикации пользователем файлов в Интернете. И благодаря своим широким возможностям настройки, её можно использовать как полноценный веб-сервер для Windows. Можно установить доступ как для всех, так и только для избранных и в этом случае доступ к файлам будет открыт только после ввода пароля. Можно назначить ограничения на тип доступных для скачивания файлов. Наконец, для дополнительной безопасности допускается размещать общедоступные папки на виртуальной файловой системе. Программа поддерживает докачку файлов, есть неплохая статистика (в том числе работающая в реальном времени), при использовании нескольких сетевых карт из них можно выбрать ту, на которой будет работать Http File Server.

    Скачиваем программу и запускаем. Программа она не требует установки. Перейдём к настройкам. Первое,что бросается в глаза- это номер порта. Вкладка Port. Жмём. По умолчанию стоит 80-й порт. Если он занят каким-либо приложением, то ничего не получится. Посему меняем. Например на 21093-й. В адресной строке программы видим наш IP-адрес и через двоеточие номер порта.

    Итак, что мы хотим отослать, папку или файл, без разницы. Перетаскиваем мышкой нужный объект в левую часть окна. Программа спрашивает нас “создавать ли копию папки для общего доступа (хорошо для маленьких объектов), либо оставить файл или папку на своём месте (в случае больших объектов,в целях экономии дискового пространства)”.

    Выделяем файл или папку мышкой и наблюдаем в адресной строке изменения: теперь адрес принял вид http://ваш IP:номер порта/файл(или папка).

    Ссылка готова! Копируем ее и высылаем другу. На той стороне при переходе по этой ссылке увидят лаконичную табличку со списком ваших файлов и кнопочкой для скачивания. Теперь самое главное- не выключайте компьютер, чтобы все успели всё скачать. Просто и удобно.

    Имеются некоторые нюансы, замеченные при работе с программой. Например, у вас подключение к интернету через роутер. В этом случае адрес будет иметь вид 192.168.x.x. Чтобы этого не было, идём в меню (вкладка Menu) и выбираем первый пункт – self test, с красным крестиком. На запрос программы отвечаем “ок” и у нас правильный, выданный провайдером IP-адрес.

    Не забываем в настройках файрволла открыть доступ программе в сеть.
    В этой же вкладке есть и другие настройки-например ограничение скорости раздачи и даже бан! Мы можем сохранить наш проект, включить опцию докачки, если наш клиент использует менеджер закачек. Можно установить пароль на расшариваемый ресурс.

    Подсунуть файл, доступный по http, как локальный. Как?

    Есть прямая ссылка на файл: example.com/photo.jpg. Как бы его так смонтировать, чтобы программы думали, что это обычный локальный файл? Я знаю о fuse, но самому написать реализацию будет сложновато. Может есть другой вариант или готовое решение на основе fuse? Или хоть очень похожий пример, по которому можно сделать. Пока интересует решение проблемы только под линукс. Спасибо.

    UDP1. Файл размещен на сервере, к которому нет никакого доступа, только прямые ссылки на файлы. Мне же нужно, чтобы на моем домашнем компьютере программы думали, что файл находится на жестком диске. Например, имеется множество изображений по прямым ссылкам. Мне нужно их смонтировать, чтобы просмотрщик изображений думал, что все эти файлы лежат на жестком диске, скажем, в каталоге ~/Photos. Прямая ссылка на файл может измениться, но просмотрщик это волновать не должно, он должен думать, что это все тот же файл. Никаких ftp и webdav. Только прямая ссылка на файл.
    UPD2. Вариант со скачиванием сделал. Но это самый крайний вариант.
    UPD3. /etc/hosts не подходит.

    • Вопрос задан более трёх лет назад
    • 322 просмотра

    3 комментария

    Оценить 3 комментария

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *