php curl lib与http GET和表单字段?

时间:2012-01-30 00:54:42

标签: php libcurl

我正在尝试编程的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库与该命令行执行相同的操作?

3 个答案:

答案 0 :(得分:0)

  

这对我来说似乎是一个矛盾,但事实上   工作,从我看到的跟踪它实际上使用GET

不完全是。 curl使用HTTP / 1.1的一个功能。它在标头Expect: 100-continue中插入了额外的字段,如果服务器支持,服务器应该响应HTTP/1.1 100 Continue,它告诉客户端继续其请求。该临时响应用于通知客户端已经接收到请求的初始部分并且尚未被服务器拒绝。客户端应该继续发送请求的剩余部分,或者如果请求已经完成,则忽略此响应。服务器必须在请求完成后发送最终响应。

答案 1 :(得分:0)

由于他们坚持使用HTTP GET ,因此只需将表单元素编码为您正在访问的网址的查询参数,并使用cURL的标准获取选项,而不是发布multipart / formdata。

答案 2 :(得分:0)

-X只会更改方法关键字,其他所有内容都将保持不变,在这种情况下(使用-F选项)意味着类似于multipart formpost。

-F是multipart formpost,你实际上无法将其转换为适合典型GET的URL中的查询部分,所以这可能不是一个好主意。

你实际上想要使用-d来指定要发布的数据,然后使用-G将该数据转换为附加到URL的字符串,以便操作变得干净利落。