【问题标题】:Curl, How to send list of strings using GET request?Curl,如何使用 GET 请求发送字符串列表?
【发布时间】:2019-04-12 09:55:41
【问题描述】:

我想将['1', '2', '3'] 作为 GET 请求发送。 我认为当您检索与 POST 相对的数据时使用 GET 请求(当您修改/创建数据时)

无法通过谷歌搜索如何使用 GET 发送字符串列表确实让我想知道,在这里使用 POST 是否更好?

【问题讨论】:

  • 你打算怎么寄?在查询字符串中?在有效载荷中?
  • 哦,我以为 GET 使用查询字符串,(附加在 url 的末尾),使用 GET 时除了查询字符串之外还有其他发送数据的方式吗?
  • 您也可以在请求标头中添加额外的数据,但如果它们旨在更改 GET 的结果,那感觉不对。
  • 1,2,3代表什么?如果是例如一个搜索查询,即再次获得 1,2,3 应该返回(或多或少)相同的结果,那么 GET 可能确实有意义。如果它旨在改变事物,那么您可能应该使用其他东西。为什么要使用 GET?

标签: rest curl


【解决方案1】:

一旦您打算执行GET 请求,您可以使用以下方法之一在查询字符串中发送数据:

curl -G http://example.org -d "query=1,2,3"
curl -G http://example.org -d "query=1&query=2&query=3"

让我强调一下,不建议使用 GET 请求中的有效负载。引用RFC 7231

GET 请求消息中的有效负载没有定义的语义;在 GET 请求上发送有效负载正文可能会导致某些现有实现拒绝该请求。

还请记住,GET 请求不应用于修改资源:它们仅用于信息检索,没有副作用。话虽如此,GET安全幂等。您可以在此answer 中查看有关这些概念的更多详细信息。


如果必须在有效负载中发送数据(并且您打算修改资源),请坚持使用POST。假设您的有效负载是一个 JSON 文档,您将拥有如下内容:

curl -X POST http://example.org \
-H "Content-Type: application/json" \
-d '["1", "2", "3"]'

【讨论】:

  • 实际使用"query=1,2,3",我从接收端得到“1,2,3”,(需要手动解析),嗯,我想这取决于你在接收端使用什么库点..
【解决方案2】:

如果你想用 curl 在正文中发送它,你可以这样调用你的服务:

curl -X GET --data "['1', '2', '3']" "https://example.com/test.php"

例如在 PHP 中,您可以从只读流 php://input

中读取它
<?php
$get_body = file_get_contents('php://input');

更好的方法是将数组分配给参数,例如x:

curl -X GET "https://example.com/test.php?x[]=1&x[]=2&x[]=3"

在 PHP 中,您将在 $_GET['x'] 中以数组形式接收这些值:

<?php
print_r($_GET['x']);

输出:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

【讨论】:

    猜你喜欢
    • 2018-03-30
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多