如何传递POST参数以在浏览器中打开网页?

吉普赛宇航员

我们可以在浏览器中使用GET参数打开一个网站,如下所示

#!/bin/bash

echo 'enter username'
read username

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

这很方便,因为我现在只需一个命令就可以访问任何用户的github页面,然后输入他们的用户名。同样,我们可以制作一个shell脚本,以通过参数中传递的查询来搜索Google。

如何打开一个需要传递POST参数的网站,以便可以从终端直接访问该网站?

https://www.startpage.com为例如果可以传递POST请求,那么我们可以直接从终端搜索查询。

注意:不是基于curl来寻找答案来检索数据,而是基于firefox或任何其他浏览器来访问网站的答案。


任何其他方式优于Selenium过像POST请求传递低水平的数据,因为用户将无法控制User-Agentlang以及其他一些头参数。如果使用Selenium,则用户只能绑定到UI选项,并且这些低级标题不能根据需要进行修改。


xdotool这将是昂贵的,因为用户必须计算要执行Tab的次数才能到达特定的表单字段,然后Tab在该处键入内容之前要循环多次。它也没有给我改低级别POST参数的能力等User-Agentlang

名义动物

您创建了一个自动提交的临时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;,每次"&#34;,每次<&lt;,每个>&gt;,这样的查询字符串可以安全地写成value名为隐藏输入的属性query(这四个就足够了。首先做“&”号也很重要,因为后续的替换都包含“&”号。由于我们将其作为隐藏输入发出,因此查询字符串不是经过url编码的;它只是普通的HTML内容,但是不带双引号(因为值本身是双引号)。

自动提交POST请求的不利之处在于,您可能需要不时地更新自动提交的HTML页面,这仅仅是因为该站点可以随时更改POST变量的名称和内部URL。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用默认浏览器批量打开网页

来自分类Dev

使用默认浏览器批量打开网页

来自分类Dev

在Excel之外的浏览器中,从功能区中的按钮直接打开网页吗?

来自分类Dev

Python 3.5 urllib无法在浏览器中打开网页

来自分类Dev

在iMacros浏览器中打开网页逐步减小,请帮助

来自分类Dev

为什么在浏览器中打开网页时不执行功能?

来自分类Dev

Java程序在浏览器中打开网页并将一些数据发布到打开的页面中

来自分类Dev

如何更改默认网页以在浏览器中打开

来自分类常见问题

在默认的Web浏览器中打开网址

来自分类Dev

如何防止过渡元素在每次浏览器第一次刷新或打开网页时过渡?

来自分类Dev

IIS重写规则-在浏览器中打开网站时,如何从网站名称中省略“索引”文本

来自分类Dev

Selenium chromeDriver 打开比直接在 chrome 浏览器中打开网站慢得多

来自分类Dev

如何在flask路由中传递url参数(在浏览器中打开时自动下载pdf的url)

来自分类Dev

iOS应用程序,链接以在浏览器中打开网站,网站中的链接关闭浏览器

来自分类Dev

如何使用Java在网页上单击超链接而不在浏览器中打开页面

来自分类Dev

如何使用Python跟踪在Web浏览器中打开的网页?

来自分类Dev

手机差距3.0 + sencha touch在设备浏览器中打开网址

来自分类Dev

通过其他浏览器在kik中打开网站

来自分类Dev

!xdg-open <URL>无法在我的默认浏览器中打开网站

来自分类Dev

在浏览器中打开网站时,为什么没有显示任何内容?

来自分类Dev

通过其他浏览器在kik中打开网站

来自分类Dev

google action Dialogflow 是否可以在浏览器中打开网站?

来自分类Dev

从gdk卡打开网址或调用浏览器

来自分类Dev

如何从WPF打开网页?

来自分类Dev

如何在网页中居中浏览器屏幕?

来自分类Dev

如何在Chrome浏览器中更正网页的字体?

来自分类Dev

如何在网页中居中浏览器屏幕?

来自分类Dev

如何使用WinJS在外部浏览器中打开带有参数的URL

来自分类Dev

如何将浏览器参数传递给Watir

Related 相关文章

  1. 1

    使用默认浏览器批量打开网页

  2. 2

    使用默认浏览器批量打开网页

  3. 3

    在Excel之外的浏览器中,从功能区中的按钮直接打开网页吗?

  4. 4

    Python 3.5 urllib无法在浏览器中打开网页

  5. 5

    在iMacros浏览器中打开网页逐步减小,请帮助

  6. 6

    为什么在浏览器中打开网页时不执行功能?

  7. 7

    Java程序在浏览器中打开网页并将一些数据发布到打开的页面中

  8. 8

    如何更改默认网页以在浏览器中打开

  9. 9

    在默认的Web浏览器中打开网址

  10. 10

    如何防止过渡元素在每次浏览器第一次刷新或打开网页时过渡?

  11. 11

    IIS重写规则-在浏览器中打开网站时,如何从网站名称中省略“索引”文本

  12. 12

    Selenium chromeDriver 打开比直接在 chrome 浏览器中打开网站慢得多

  13. 13

    如何在flask路由中传递url参数(在浏览器中打开时自动下载pdf的url)

  14. 14

    iOS应用程序,链接以在浏览器中打开网站,网站中的链接关闭浏览器

  15. 15

    如何使用Java在网页上单击超链接而不在浏览器中打开页面

  16. 16

    如何使用Python跟踪在Web浏览器中打开的网页?

  17. 17

    手机差距3.0 + sencha touch在设备浏览器中打开网址

  18. 18

    通过其他浏览器在kik中打开网站

  19. 19

    !xdg-open <URL>无法在我的默认浏览器中打开网站

  20. 20

    在浏览器中打开网站时,为什么没有显示任何内容?

  21. 21

    通过其他浏览器在kik中打开网站

  22. 22

    google action Dialogflow 是否可以在浏览器中打开网站?

  23. 23

    从gdk卡打开网址或调用浏览器

  24. 24

    如何从WPF打开网页?

  25. 25

    如何在网页中居中浏览器屏幕?

  26. 26

    如何在Chrome浏览器中更正网页的字体?

  27. 27

    如何在网页中居中浏览器屏幕?

  28. 28

    如何使用WinJS在外部浏览器中打开带有参数的URL

  29. 29

    如何将浏览器参数传递给Watir

热门标签

归档