Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有http GET和表单字段的php curl库?_Php_Libcurl - Fatal编程技术网

带有http GET和表单字段的php curl库?

带有http GET和表单字段的php curl库?,php,libcurl,Php,Libcurl,我试图编写的API需要使用HTTP GET谓词的多部分/表单数据内容。在命令行中,我可以这样做: curl-X GET-H“Accept:application/json”-F grant\u type=consumer\u凭证-F consumer\u key=$key-F consumer\u secret=$secrethttps://example.com/api/AccessToken 这在我看来似乎是一个矛盾,但它实际上是有效的,从我所看到的跟踪它实际上使用GET。我用PHP的cUR

我试图编写的API需要使用HTTP GET谓词的多部分/表单数据内容。在命令行中,我可以这样做:

curl-X GET-H“Accept:application/json”-F grant\u type=consumer\u凭证-F consumer\u key=$key-F consumer\u secret=$secrethttps://example.com/api/AccessToken

这在我看来似乎是一个矛盾,但它实际上是有效的,从我所看到的跟踪它实际上使用GET。我用PHP的cURL库尝试了很多方法来实现这一点,但我似乎无法让它不使用POST,因为他们的服务器会出错

更新澄清了这个问题:如何让php的cURL库做与命令行相同的事情

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


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

因为他们坚持HTTPGET,所以只需将表单元素编码到您获取的URL上的查询参数中,并使用cURL的标准GET选项,而不是发布多部分/formdata。

-X只会更改method关键字,其他一切都将保持不变,在本例中(使用-F选项)的意思类似于多部分formpost

-F是多部分formpost,您确实无法将其转换为URL中适合典型GET的查询部分,因此这可能不是一个好主意


我猜您实际上希望使用-d来指定要发布的数据,然后使用-G将该数据转换为一个字符串,该字符串将被附加到URL中,这样操作就变成了一个漂亮而干净的GET。

是的,在跟踪命令行调用时,我确实看到了正在交换的continue。仍然不知道如何让php cURL lib做同样的事情。@cabbey问题是没有地方可以尝试代码:)顺便问一下,你确定问题出在POST请求上吗?是的,它不完全是一个公共API(通过比较网络跟踪,我排除了所有其他差异。不过,我有一个理论,我正在尝试。@cabbey我尝试了一些东西,php版本的curl只处理post或get。为什么不从命令行使用curl?否则,您需要某种类型的http请求类,可以修改。或者可以使用fsockopen编写自己的代码,等等:)@cabbey这可能会有所帮助(或者,至少会让生活更轻松)。。您应该在发布问题之前搜索该网站。这篇文章应该能帮助你解决你的问题: