如何使用 Curl 发送 GET 和 POST 请求?

如何使用 Curl 发送 GET 和 POST 请求?

如何使用命令行向URL发送带有参数gimmeflag和值的GET 和 POST 请求?pleasehttp://103.200.7.150:7777/curl

答案1

看起来就像您正在遵循教程或书籍,这是一种测试您是否掌握基础知识的巧妙方法。

呼唤http://103.200.7.150:7777/通过 curl 或浏览器产生以下输出:

请向我发送请求方法 GET 和 POST,参数为“gimmeflag”,值是“please”

让我们把它分成两部分,因为你想知道它是如何完成的curl(见man 1 curl或者curl 手册)。

使用 GET 发送您的请求:

如果你知道如何query-string好像。

在万维网上,查询字符串是统一资源定位器 (URL) 的一部分,其中包含不便于放入分层路径结构的数据。查询字符串通常包括由 Web 浏览器或其他客户端应用程序添加到基本 URL 的字段,例如作为 HTML 表单的一部分。

Web 服务器可以通过基于 URL 路径从其文件系统读取文件或使用特定于资源类型的逻辑处理请求来处理超文本传输​​协议请求。在调用特殊逻辑的情况下,查询字符串将与 URL 的路径部分一起供该逻辑用于处理。(来源

您想要发送一个参数gimmeflag和一个值please。因此,您要请求的行curl是:

curl -X GET http://103.200.7.150:7777/?gimmeflag=please

从服务器返回的结果:

KSL{n0w_y0u_知识_如何_To

使用 POST 发送您的请求:

鉴于 GET 行,POST 也相当容易,只需用 POST 替换 GET 即可:

curl -X POST http://103.200.7.150:7777/?gimmeflag=please

从服务器返回的结果:

_S3nD_r3quesT_Meth0d_GET_AND_POST}

总结一下:

# Thanks to @pa4080 for this line
printf '%s%s\n' \
"$(curl -X GET http://103.200.7.150:7777/?gimmeflag=please 2>/dev/null)" \
"$(curl -X POST http://103.200.7.150:7777/?gimmeflag=please 2>/dev/null)"

KSL{n0w_y0u_Know_How_To_S3nD_r3quesT_Meth0d_GET_AND_POST}

答案2

我在这里回答,因为我没有足够的声誉来发表评论。有两个答案,得票最多的答案不知道 HTTP 协议的工作原理。

POST 数据在 HTTP 负载主体中传输,而不是在 URL 中传输。URL 中的查询字符串只是通过 GET 发送数据的一种技巧,GET 并不是用于发布数据的操作(GET 和 POST 是不言自明的)。

使用 curl 和 POST 的正确方法是:

curl -X POST -d "gimmeflag=please" http://103.200.7.150:7777/

如果测试使用 GET 和 POST 变量分离的语言实现的脚本,curl -X POST http://103.200.7.150:7777/?gimmeflag=please则将存储找到 GET 变量的变量。

答案3

这个答案展示了如何实现@Videonauth 的回答wget

$ wget -qO- http://103.200.7.150:7777/ 
Please send me request method GET and POST with params "gimmeflag" and value "please"
$ wget -qO- http://103.200.7.150:7777/?gimmeflag=please # GET is the default request
KSL{n0w_y0u_Know_How_To
$ wget -qO- --post-data '' http://103.200.7.150:7777/?gimmeflag=please # Simple POST req.
_S3nD_r3quesT_Meth0d_GET_AND_POST}
$ printf '\n%s%s\n' \
"$(wget -qO- http://103.200.7.150:7777/?gimmeflag=please 2>/dev/null)" \
"$(wget -qO- --post-data '' http://103.200.7.150:7777/?gimmeflag=please 2>/dev/null)"

KSL{n0w_y0u_Know_How_To_S3nD_r3quesT_Meth0d_GET_AND_POST}

man wget

-O file; --output-document=file - The documents will not be written to the appropriate 
     files, but all will be concatenated together and written to file. If '-' is used 
     as file, documents will be printed to standard output, disabling link conversion...

-q; --quiet - Turn off Wget's output.

--post-data=string; --post-file=file - Use POST as the method for all HTTP requests 
     and send the specified data in the request body. --post-data sends string as data, 
     whereas --post-file sends the contents of file. Other than that, they work in 
     exactly the same way. In particular, they both expect content of the form 
     "key1=value1&key2=value2", with percent-encoding for special characters... 
     Only one of --post-data and --post-file should be specified... This example shows 
     how to log in to a server using POST and then proceed to download the desired pages, 
     presumably only accessible to authorized users:

         # Log in to the server.  This can be done only once.
         wget --save-cookies cookies.txt --post-data 'user=foo&password=bar' \
         http://example.com/auth.php

相关内容