Я ищу инструмент (возможно, в Linux), который позволил бы мне сделать запрос HTTP или HTTPS вручную. Под руководством я действительно имею в виду: я должен быть в состоянии передать ему текстовый файл, который выглядит как
POST /foo HTTP/1.1
Host: www.example.com
Accept: text/xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Content-Type: text/plain
Content-Length: 11
Hello world
и целевой URL (www.example.com/foo) и отправьте запрос на URL. Самое большее, было бы полезно, если бы заголовок Content_Length вычислялся автоматически.
Я мог бы написать такой инструмент, используя некоторую библиотеку, такую как httplib в Python, но сама причина, по которой мне это нужно, - это проводить ручное исследование, когда что-то не так с такими библиотеками.
Ответы:
У wget есть опция --post-file, которая должна работать на вас.
Изменить: Кроме того, есть Ncat , который вы бы использовали аналогично предложению Рэндольфа Ричардсона Telnet, за исключением того, что он также поддерживает SSL / HTTPS:
источник
Для HTTP (не HTTPS) одна альтернатива команде "wget", которая приходит на ум, - это использовать telnet следующим образом:
Файл «input.txt» представляет собой список предварительно заданных команд, которые вы хотите передать хосту по имени хоста, а файл «output.txt» будет хранить ответ.
источник
Вы можете отправить запрос GET с помощью OpenSSL:
Обратите внимание, что вы также можете использовать «HTTP / 2», но будьте осторожны, потому что некоторые серверы (например, github.com) не поддерживают его.
источник
Для меня это работало создание файла запроса (пример:
request.txt
)И затем вызовите
openssl s_client
команду:cat request.txt | openssl s_client -quiet -connect www.example.com:443
Однако будьте осторожны с некоторыми моментами:
Content-type: text/plain; charset=utf-8
если файл имеет кодировку utf-8.HTTP/1.1 505 HTTP Version Not Supported
, потому что стандартный протокол HTTP использует CR / LF для окончания строки ( https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html ). Вы можете использоватьunix2dos
команду, чтобы сделать это преобразование.Connection: close
заголовок для завершения запроса и возврата из вызова. В противном случае команда будет ожидать взаимодействия с пользователем, если сервер обычно отвечаетConnection: keep-alive
заголовком.источник
Я удивлен, что никто не упомянул cURL . Это сделано именно для того, что вы хотите сделать. И это доступно практически на любой платформе (включая Windows).
Итак, для вашего примера все, что вам нужно сделать, это:
Который пойман с Wireshark будет вам чистым:
Вы можете легко изменить заголовки, если вы хотите делать все что угодно (например, изменять пользовательский агент и т. Д.).
Изменить: не заметил требование "из файла". Вы также можете сделать это, либо в простом ascii, либо в двоичных файлах. Вы просто указываете имя файла с символом @
источник