Я заинтересован в написании сценария HTTP-запроса для прослушивающей веб-службы, которую я написал (в целях тестирования). Я хочу сделать это в Powershell. Инициировать HTTP-запрос через telnet достаточно просто.

telnet google.com 80

Затем, после того, как сокет установлен, я могу ввести следующую команду HTTP и файл:

GET /search?q=test

Это эквивалентно поиску в Google слова «тест». Большой! Однако мне нужно предоставить более подробный заголовок HTTP-запроса, если я хочу сделать что-то более интересное. Я пытаюсь сделать что-то очень похожее на приведенный здесь пример: http://blog.tonycode.com/tech-stuff/http-notes/making-http-requests-via-telnet

Следуя примеру автора с предыдущего сайта, я создал локальный файл со следующим содержимым:

echo "open $1 $2"
sleep 2
echo "GET $4 HTTP/1.0"
echo "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4"
echo "Host: $3"
echo
echo
sleep 2

(Это похоже на настраиваемый заголовок HTTP-запроса, который я хотел бы использовать для тестирования моих собственных веб-служб)

Затем я сохраняю этот файл как «getpage» (я также пробовал сохранить его как «getpage.sh»). Я продолжаю следовать примеру автора и пытаюсь передать предыдущий файл в telnet из Powershell:

./getpage tonycode.com 80 tonycode.com /| telnet

Однако Powershell возвращает следующую ошибку:

Cannot run a document in the middle of a pipeline: ~\Desktop\getpage.
At line:1 char:1
+ ./getpage tonycode.com 80 tonycode.com /| telnet
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (~....Desktop\getpage:String) [], RuntimeException
+ FullyQualifiedErrorId : CantActivateDocumentInPipeline

Я набрал $ PSVersionTable в Powershell и подтвердил, что использую Powershell версии 4.0. Идеи у меня заканчиваются. Я просмотрел форумы StackOverflow относительно HTTP-запросов через telnet, но я не нашел хорошего способа отправить настраиваемый заголовок HTTP-запроса через telnet, передав предварительно сформированный заголовок http через оболочку. Я действительно не могу ввести весь запрос Http в telnet, потому что 1) это противоречит цели написания сценариев такого рода и 2) нажатие клавиши Enter из telnet отправляет текущий запрос до того, как я смогу закончить ввод полного заголовка Http. Есть ли у кого-нибудь предложения, как я могу сделать это в PowerShell? Я уже могу писать и отправлять пользовательские заголовки Http в Firefox, и это облегчает жизнь. Я просто хотел бы написать это в Powershell, если это возможно. Заранее спасибо.

1
h0r53 24 Дек 2015 в 00:24

2 ответа

Лучший ответ

Я заинтересован в написании сценария HTTP-запроса для прослушивающей веб-службы, которую я написал (в целях тестирования). Я хочу сделать это в Powershell.

Тогда оставьте telnet в покое :)

PowerShell (v3 +) имеет встроенные командлеты:

Или вы можете использовать System.Net.Sockets.TcpClient

Или System.Net.WebClient

PS :

Lee Holmes in action :D

2
Jaqueline Vanek 24 Дек 2015 в 03:36

Использование telnet для разговора HTTP могло быть "круто" в прошлом. Но сейчас этого делать не следует. Особенно, когда требуется нечто большее, чем тривиальный GET.

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

Примечания:

  • HTTP / 1.0 в настоящее время заблокирован многими сайтами. Вероятно, вам следует использовать HTTP / 1.1.
  • HTTP / 2 - это бинарный протокол. Использование telnet или любого другого "текстового" метода, о котором вы, возможно, читали, просто невозможно с этим протоколом.
2
Not Important 23 Дек 2015 в 23:25