我正在尝试编程的API需要带有HTTP GET动词的多部分/表单数据内容。从命令行中,我可以像这样工作:
curl -X GET -H "Accept: application/json" -F grant_type=consumer_credentials -F consumer_key=$key -F consumer_secret=$secret https://example.com/api/AccessToken
这对我来说似乎是一个矛盾,但它确实有效,从我所看到的跟踪来看,它实际上使用了 GET。 我已经尝试了很多东西来使用它使用 PHP 的 cURL 库,但我似乎无法让它不使用 POST,他们的服务器因错误而踢出。
更新以澄清问题:如何让 php 的 cURL 库执行与该命令行相同的操作?
这对我来说似乎是矛盾的,但实际上 有效,从我所看到的跟踪来看,它实际上使用了 GET
不完全是。curl 使用 HTTP/1.1 的一个特性。它在标头Expect: 100-continue
中插入了额外的字段,如果服务器支持,服务器应该通过HTTP/1.1 100 Continue
响应,告诉客户端继续其请求。此临时响应用于通知客户端请求的初始部分已收到,并且尚未被服务器拒绝。客户端应通过发送请求的其余部分继续,或者,如果请求已完成,则忽略此响应。服务器必须在请求完成后发送最终响应。
由于他们坚持使用 HTTP GET,那么只需将表单元素编码为您正在 GET 的 URL 上的查询参数,并使用 cURL 的标准获取选项,而不是发布多部分/表单数据。
-X 只会更改方法关键字,其他所有内容都将保持不变,在这种情况下(使用 -F 选项(意味着像多部分 formpost。
-F 是多部分表单,您确实无法将其转换为适合典型 GET 的 URL 中的查询部分,因此这可能不是一个好主意。
我猜你实际上想使用 -d 来指定要发布的数据,然后你使用 -G 将该数据转换为附加到 URL 的字符串,以便操作变成一个漂亮而干净的 GET。