当前位置: 首页 > 知识库问答 >
问题:

PHP cURL不能正确设置内容长度

法浩壤
2023-03-14
<?php
if(isset($_POST["id"])) {
  $data = array("id" => $_POST["id"]);
  $data["file"] = "@".realpath($_FILES["file"]["tmp_name"]);
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Authorization: Bearer 0e39ffba-66cd-4933-9e94-fcdf600c2453',
    'Connection: keep-alive'
  ));
  curl_setopt($ch, CURLOPT_URL, "http://localhost:8080/test-api/upload");
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  curl_setopt($ch, CURLOPT_VERBOSE, false);
  curl_setopt($ch, CURLOPT_HTTP_VERSION, 1);
  $response = curl_exec($ch);
  var_dump($response);
  exit;
}
?>
INFO: 25 * Server has received a request on thread http-nio-8080-exec-1
25 > POST http://localhost:8080/test-api/upload
25 > authorization: Bearer 0e39ffba-66cd-4933-9e94-fcdf600c2453
25 > connection: keep-alive
25 > content-length: 261
25 > content-type: multipart/form-data; boundary=------------------------53f7ba34739b4d9e
25 > host: localhost:8080
INFO: 26 * Server has received a request on thread http-nio-8080-exec-3
26 > POST http://localhost:8080/test-api/upload
26 > accept-encoding: gzip, deflate
26 > accept-language: hu-HU,hu;q=0.8,en-US;q=0.6,en;q=0.4
26 > authorization: Bearer 0e39ffba-66cd-4933-9e94-fcdf600c2453
26 > cache-control: no-cache, no-cache
26 > connection: keep-alive
26 > content-length: 144954
26 > content-type: multipart/form-data; boundary=----WebKitFormBoundarye5Tg0kEqi10nEBwv
26 > cookie: ff_uvid=126143952; _ga=GA1.1.459454356.1439469592; CAKEPHP=9mffidqo8203ugktan4roc0u82
26 > host: localhost:8080
26 > origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
26 > user-agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36

共有1个答案

费凯康
2023-03-14

听起来您使用的是PHP 5.6.0或更高版本。从这个版本开始,默认情况下禁用文件上载的@前缀。您可以使用

curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);

这个选项是在5.5中添加的,但是为了向后兼容,默认值是false;5.6不兼容地更改了默认值。

从5.5开始执行文件上传的首选方法是使用CurlFile类。

$data["file"] = new CurlFile(realpath($_FILES["file"]["tmp_name"]));
 类似资料:
  • 我有一个用以下注释映射的控制器: 我返回一个有效的JSON字符串,但是,当我在浏览器中的Chrome Dev Tools上查看响应时,内容类型不是,而是简单的。为什么没有设置内容类型? 我的: 我的: 使用Wildfly8.1作为我的应用服务器。

  • 为了Spark Streaming应用程序能够在集群中稳定运行,系统应该能够以足够的速度处理接收的数据(即处理速度应该大于或等于接收数据的速度)。这可以通过流的网络UI观察得到。批处理时间应该小于批间隔时间。 根据流计算的性质,批间隔时间可能显著的影响数据处理速率,这个速率可以通过应用程序维持。可以考虑WordCountNetwork这个例子,对于一个特定的数据处理速率,系统可能可以每2秒打印一次

  • 问题内容: 我想通过服务器客户端JSP页面获取内容大小。但是request.getContentLength()总是返回-1,我为什么不呢? Android程式码片段: 问题答案: 您正在使用conn.setChunkedStreamingMode(100),当content- lenght事先未知时,它将有效地启用100字节块中的块传输编码。 如果事先知道要在请求正文中发送的内容的长度,请使用c

  • nginx解决跨域,前端请求后返回的不是想要的内容? 正常返回应该是: 而实际返回确实:

  • 我正试图在我的Fedora 22上安装MATLAB。最后,我得到一个错误 应用程序遇到意外错误,需要关闭。您可能需要尝试重新安装产品。更多信息可以在 /tmp/mathworks_root.log找到 当我查看mathworks_root.log文件时,我发现在安装步骤中未正确设置Java Home Java Home /tmp/mathworks_32206/sys/java/jre/glnxa

  • 问题内容: 我有一个映射有以下注释的控制器: 我返回了一个有效的JSON字符串,但是,当我在浏览器中的Chrome Dev Tools上查看响应时,内容类型不是唯一的。为什么未设置内容类型? 我的: 我的: 使用WildFly 8.1作为我的应用服务器。 问题答案: 要了解的第一件事是,在元素 仅用于限制请求处理程序的映射。 它什么也没做。 然后,假设您的方法的返回类型为,并带有注释,则将通过处理