【问题标题】:How to do a HTTP (POST) Request in PHP without requiring any configuration如何在 PHP 中执行 HTTP (POST) 请求而不需要任何配置
【发布时间】:2016-12-14 02:33:00
【问题描述】:

我正在创建一个希望任何人都能使用的 PHP 包。 几年没做过 PHP 开发,对 pear 和 pecl 不熟悉。

我的问题的第一部分与 Pecl 和 Pear 有关:
在我看来,Pear 和 pecl 正在更新我的计算机,而不是对我的代码库做任何事情,这导致我假设我对它们所做的任何事情也需要被任何想要使用我的包的人复制。对吗?

我的问题的第二部分是具体的,我只想做一个简单的 HTTP (POST) 请求,理想情况下我想这样做,而使用我的包的人不需要任何配置。

这些是我正在考虑的选项:

  • HTTPRequest 似乎是完美的选择,但当我尝试开箱即用时,它会显示“致命错误:未捕获的错误:找不到类 'HttpRequest'”,当我按照these instructions 安装它时,我得到“autoheader: error: AC_CONFIG_HEADERS not found in configure.in 错误: `phpize' failed" -- 我不想调试这样疯狂的东西来做一个简单的 HTTP 请求,我也不想让使用我的包的人不得不经历这样的事情。

  • 我使用了HTTP_Request2 via a pear install,它对我有用,但我的代码库中根本没有添加任何内容,所以对于尝试使用我的包的人来说,除非他们遵循相同的安装步骤,否则这可能会中断?

  • 我知道我可以使用CURL,但是对于这样一个简单的操作,它的语法似乎太过分了(我希望我的代码非常易于阅读)

  • 我想我可以使用file_get_contents() ..这是最好的选择吗?
    也许我会将问题的第二部分表述为:

是否有一种方法被认为是 (1) 在 PHP 中执行 HTTP 请求和 (2) 创建任何人都可以轻松使用的包的最佳实践?

【问题讨论】:

  • 我知道你说你认为 curl() 是最重要的,但我不知道为什么,这就是我会推荐的。 file_get_contents 的问题是很多主机不会启用外部包装器。
  • 谢谢@Dagon,我在使用 PHP curl 时遇到的最大问题,这可能是因为我不熟悉它,我不知道如何查看实际的“curl”命令它正在做的是我的代码的(即命令行等效项),我遇到过这样的情况,我有一个 curl 命令行语句可以执行我想要的操作,然后我真的很难将它转换为 PHP curl做同样的代码
  • 这将是一个更好的问题,这是一个基于意见且广泛的问题。虽然 curl 确实有一百万个选项(这很棒),但听起来您的代码将是 3-4 行 php.net/manual/en/curl.examples-basic.php
  • 每个主机都可以决定是否安装 curl,以及禁用任何功能 - 没有通用的方法。
  • 不,它只能在启用了 fopen 包装器的情况下在 http 上工作。而且我知道许多共享主机没有启用它们

标签: php http curl request httprequest


【解决方案1】:

这实际上取决于您需要什么请求。虽然第一次学习它可能会令人生畏,但我更喜欢大多数时间使用 cURL 请求,除非我需要做的就是查询没有标题的页面。在我看来,一旦您习惯了语法和各种选项,它就会变得非常可读。当我需要做的只是查询一个没有标题的页面时,我通常会使用file_get_contents,因为这样看起来更漂亮、更简单。我也认为大多数 PHP 开发人员都同意我的观点。我建议使用 cURL 请求,因为当您需要设置标头时,它们非常有条理并且比使用 file_get_contents 更受欢迎。

编辑
在学习如何在 PHP 中进行 cURL 时,文档页面上的选项列表是您的朋友! http://php.net/manual/en/function.curl-setopt.php

这是一个使用 PHP 的简单 POST 请求示例,该请求将返回响应文本:

$data = array("arg1" => "val1", "arg2" => true); // POST data included in your query
$ch = curl_init("http://example.com"); // Set url to query 

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); // Send via POST                                         
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); // Set POST data                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Return response text   
curl_setopt($ch, CURLOPT_HEADER, "Content-Type: application/x-www-form-urlencoded"); // send POST data as form data

$response = curl_exec($ch);
curl_close($ch);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    相关资源
    最近更新 更多