브라우저에서 웹 페이지를 열려면 POST 매개변수를 전달하는 방법은 무엇입니까?

브라우저에서 웹 페이지를 열려면 POST 매개변수를 전달하는 방법은 무엇입니까?

우리는 웹사이트를 열 수 있어요얻다브라우저의 매개변수는 다음과 같습니다.

#!/bin/bash

echo 'enter username'
read username

firefox "https://github.com/${username}"

이제 단 하나의 명령으로 모든 사용자의 github 페이지에 액세스한 다음 사용자 이름을 입력할 수 있기 때문에 편리합니다. 마찬가지로 매개변수에 전달된 쿼리를 사용하여 Google을 검색하는 셸 스크립트를 만들 수 있습니다.

필요한 웹사이트를 여는 방법우편 엽서터미널에서 직접 웹사이트에 액세스할 수 있도록 매개변수를 전달하고 싶나요?

예를 들어,https://www.startpage.com. POST 요청을 전달할 수 있으면 터미널에서 직접 쿼리를 검색할 수 있습니다.

참고: 데이터를 검색하기 위한 컬 기반 답변을 찾는 것이 아니라 웹 사이트에 액세스하기 위한 Firefox 또는 기타 브라우저 기반 답변을 찾는 것입니다.


Selenium사용자는 POST 요청에 전달된 하위 수준 데이터(예 User-Agent: lang및 기타 헤더 매개변수) 를 제어할 수 없기 때문에 다른 방법이 더 좋습니다 . Selenium을 사용하는 경우 사용자는 UI 옵션에만 바인딩되며 이러한 하위 수준 헤더는 필요에 따라 수정할 수 없습니다.


xdotoolTab이는 사용자가 특정 양식 필드에 도달하는 데 걸리는 횟수를 계산 한 다음 Tab내용을 입력하기 전에 여러 번 반복해야 하기 때문에 비용이 많이 듭니다. 또한 등과 같은 낮은 수준의 POST 매개변수를 변경할 수도 없습니다 User-Agent.lang

답변1

임시 자동 제출 HTML 페이지를 만들고 브라우저에서 해당 페이지를 가리키고 몇 초 후에 더 이상 필요하지 않은 임시 HTML 파일을 삭제합니다. 스크립트 형식:

#!/bin/bash

# Create an autodeleted temporary directory.
Work="$(mktemp -d)" || exit 1
trap "cd / ; rm -rf '$Work'" EXIT

# Create a HTML page with the POST data fields,
# and have it auto-submit when the page loads.
cat > "$Work/load.html" <<END
<!DOCTYPE html>
<html>
 <head>
  <title>&hellip;</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <script type="text/javascript">
   function dosubmit() { document.forms[0].submit(); }
  </script>
 </head>
 <body onload="dosubmit();">
  <form action="https://www.startpage.com/do/asearch" method="POST" accept-charset="utf-8">
   <input type="hidden" name="cat" value="web">
   <input type="hidden" name="cmd" value="process_search">
   <input type="hidden" name="language" value="english">
   <input type="hidden" name="engine0" value="v1all">
   <input type="hidden" name="query" value="&#34;Nominal Animal&#34;">
  </form>
 </body>
</html>
END

# Load the generated file in the browser.
firefox "file://$Work/load.html"

# Firefox returns immediately, so we want to give it a couple
# of seconds to actually read the page we generated,
# before we exit (and our page vanishes).
sleep 2

StartPage가 명령줄에 제공된 문자열을 검색하도록 위의 내용을 변경해 보겠습니다.

#!/bin/bash

# Create an autodeleted temporary directory.
Work="$(mktemp -d)" || exit 1
trap "cd / ; rm -rf '$Work'" EXIT

# Convert all command-line attributes to a single query,
# escaping the important characters.
rawAmp='&'   ; escAmp='&amp;'
rawLt='<'    ; escLt='&lt;'
rawGt='>'    ; escGt='&gt;'
rawQuote='"' ; escQuote='&#34;'
QUERY="$*"
QUERY="${QUERY//$rawAmp/$escAmp}"
QUERY="${QUERY//$rawQuote/$escQuote}"
QUERY="${QUERY//$rawLt/$escLt}"
QUERY="${QUERY//$rawGt/$escGt}"

# Create a HTML page with the POST data fields,
# and have it auto-submit when the page loads.
cat > "$Work/load.html" <<END
<!DOCTYPE html>
<html>
 <head>
  <title>&hellip;</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <script type="text/javascript">
   function dosubmit() { document.forms[0].submit(); }
  </script>
 </head>
 <body onload="dosubmit();">
  <form action="https://www.startpage.com/do/asearch" method="POST" accept-charset="utf-8">
   <input type="hidden" name="cat" value="web">
   <input type="hidden" name="cmd" value="process_search">
   <input type="hidden" name="language" value="english">
   <input type="hidden" name="engine0" value="v1all">
   <input type="hidden" name="query" value="$QUERY">
  </form>
 </body>
</html>
END

# Load the generated file in the browser.
firefox "file://$Work/load.html"

# Firefox returns immediately, so we want to give it a couple
# of seconds to actually read the page we generated,
# before we exit (and our page vanishes).
sleep 2

&변경된 모든 것은 쿼리 문자열이 숨겨진 입력이라는 속성 에 안전하게 기록될 수 있도록 Bash 문자열 조작을 사용하여 각 블록을 &amp;, 각 "with &#34;, 각 <with &lt;및 각 with 로 바꾸는 것입니다 . (이 네 개면 충분합니다. 후속 대체에는 앰퍼샌드가 포함되므로 앰퍼샌드를 먼저 수행하는 것도 중요합니다.>&gt;valuequery숨겨진 입력의 경우 쿼리 문자열은 URL로 인코딩되지 않습니다. 단순한 HTML 콘텐츠이지만 큰따옴표가 없습니다(값 자체가 큰따옴표로 묶여 있기 때문입니다). )

POST 요청 자동 제출의 단점은 웹사이트가 언제든지 POST 변수 이름 지정 및 내부 URL을 변경할 수 있으므로 자동 제출 HTML 페이지를 수시로 업데이트해야 할 수 있다는 것입니다.

답변2

포함된 Firefox 기반퍼핏 자동화 드라이버. 공식 Python 바인딩을 설치합니다.

pip2 install --user marionette_driver
#!/usr/bin/python2

from marionette_driver.marionette import Marionette
from marionette_driver import By

client = Marionette('localhost', port=2828)
client.start_session()
client.navigate("https://www.startpage.com/")

query = client.find_element(By.ID, 'query')
query.send_keys("Search Me")
submit = client.find_element(By.ID, 'submit1')

submit.click()

이 스크립트를 사용하려면 Firefox가 실행 중이어야 합니다. 어쩌면 활성화해야 할 수도 있습니다.인형옵션을 사용하십시오 --marionette.

답변3

lynx명령줄 POST는 지원되지 않습니다.

다음 솔루션만 표시됩니다.

  1. 셀레늄과 같은 일부 네트워크 자동화 소프트웨어를 사용하십시오.

  2. 언어를 선택하고 간단한 자동화 코드를 작성하세요.

    브라우저를 시작하고 cmdline에 URL을 전달하십시오.

몇 초간 기다렸다가 키 입력을 시뮬레이션하여 양식 필드를 채웁니다.

예를 들어 참조하십시오.http://www.semicomplete.com/projects/xdotool/

답변4

이것제드 공격 에이전트당신에게 도움이 될 수도 있습니다(불행한 이름을 가진 유연한 차단 프록시입니다). 다음 사항에 주목합니다.https://stackoverflow.com/questions/tagged/zap

이로 인해 자연스럽게 명령줄에서 프록시 서버를 지정하는 데 문제가 발생합니다. 이것은 파이어폭스입니다:https://stackoverflow.com/questions/843340/firefox-proxy-settings-via-command-line#843366 - 크롬이 걸릴 것입니다--proxy-server=IP:포트

관련 정보