从PHP提交POST请求的最佳方法是什么?

时间:2010-11-02 21:04:44

标签: php post curl

我一直试图找到答案,但似乎无法做到。从PHP向另一台服务器提交简单POST请求的最佳方法是什么? cURL似乎运行速度极慢;我正在加载几秒钟,等待cURL。有什么想法吗?

编辑:根据要求,这是代码:

  $x = curl_init("http://www.server.com/API.php");
  curl_setopt($x, CURLOPT_POST, 1);
  curl_setopt($x, CURLOPT_POSTFIELDS, $inputdata);
  $data = curl_exec($x);
  curl_close($x);
  echo $data;
然而,这是一个循环。我假设这种简单的疏忽可能是我问题的根源。

3 个答案:

答案 0 :(得分:3)

套接字有点低,但很快。您也可以尝试HttpRequest:http://php.net/manual/en/function.httprequest-send.php

但是,在我看来,我认为cURL不如服务器连接那么多。尝试将其设置为记录并查看问题所在:

curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_VERBOSE, true); 

并检查您的DNS设置以及您要连接的网站的设置。您可以尝试手动加载页面,并查看在连接和浏览器上执行此操作的速度。您还可以尝试获取最新版本的cURL以及您使用它的任何其他库。如果您要发出多个请求,请使用cURL多句柄,而不是几个单独的句柄。如果您不需要网页的正文,只需提交一些内容,请尝试NO_BODY为true,这样可以减少加载时间。最后,尝试缓存或多线程。

编辑:并且还尝试不设置这么多的标题或cookie,这些会大大降低你的速度。如果你真的希望我们找到一个好的答案,发布你的代码,我会评论我可以在哪些方面做出改进。顺便说一句,如果您在cURL构建中启用了ipv6并且不使用它,请禁用它,我听说ipv6存在滞后问题。我记得的其他特殊问题包括没有在您的服务器上设置反向DNS。

答案 1 :(得分:1)

答案 2 :(得分:1)

我通常使用fopen() http包装器,stream_context_create()。有关示例,请参阅this comment